我正在寻求一些帮助来解决如何为我的应用程序设置 Eloquent 关系。
我已经为三个表创建了迁移。
| 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。
最佳答案
你在这里做的实际上是一个 M:M 关系,Laravel Eloquent 已经支持那个 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
关于mysql - Laravel Eloquent 和 3 表关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39631620/