2016-09-22 134 views
1

我正在寻找一些帮助,了解如何为我的应用程序设置Eloquent关系。Laravel雄辩和3表关系

我已经为三个表创建了迁移。

| users  | | items  | | user_items | 
+-----------+ +-----------+ +------------+ 
| id  | | id  | | id   | 
| username | | name  | | user_id | 
           | item_id | 
           | qty  | 

我已经安装在表user_items的唯一索引,限制1名的用户ID为1的项目ID,但具有qty列。我想设置Eloquent,以便我有两个模型,User和Item。我可以说的地方:

$item = $user->items()->first(); 
$name = $item->name; 
$qty = $item->qty; 

问题是我想弄清楚,如果我需要第三个模型,UserItem或不。

回答

1

你在这里做什么实际上是一个M:M关系,而Laravel雄辩已经支持那个o ut of the box.你拥有的user_item表被称为数据透视表。

以下是如何使用Eloquent建立你的关系。

// User class 
class User extends Eloquent { 

public items() { 
    return $this->belongsToMany(Item::class)->withPivot('qty'); 
} 

} 

class Item extends Eloquent { 
    public function users() { 
     return $this->belongsToMany(User::class)->withPivot('qty'); 
    } 
} 

对于这个工作,你将需要三个迁移:

  • 一个用户表
  • 一个用于项目表
  • 一个用于item_user表。在Eloquent中,数据透视表由按字母顺序排列的两个表名组成。用短划线分开。
  • 遵循Eloquent约定,如果您将FK设置为​​使用_id,Eloquent将不需要额外的信息。因此,就你的情况而言,item_user表中的FK应分别为user_id和item_id。
  • 不需要ItemUser模型。你可以通过做访问枢轴的关系:
$user = User::find(1); 
$user->items[0]->pivot->qty; // retrieve the quantity 
+0

谢谢Exrakun,即支点语法正是我一直在寻找。 –