Laravel Eloquent 和 3 table 关系
Laravel Eloquent and 3 table relationship
我正在寻求一些帮助来解决如何为我的应用程序设置 Eloquent 关系。
我已经为三个 table 创建了迁移。
| users | | items | | user_items |
+-----------+ +-----------+ +------------+
| id | | id | | id |
| username | | name | | user_id |
| item_id |
| qty |
我在 user_items
table 上设置了唯一索引,将 1 个用户 ID 限制为 1 个项目 ID,但有一个 qty 列。我想设置 Eloquent 以便我有两个模型,用户和项目。我可以说的地方:
$item = $user->items()->first();
$name = $item->name;
$qty = $item->qty;
问题是我想弄清楚我是否需要第三个模型,是否需要 UserItem。
你在这里做的其实是一个M:M关系,而且LaravelEloquent已经支持那个out of the box. user_itemtable 你有被称为枢轴 table.
以下是使用 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');
}
}
为此,您需要三个迁移:
- 一个给用户 table
- 一个用于项目 table
- 一个用于 item_user table。在 Eloquent 中,主元 table 由两个 table 的名字按字母顺序组成。用破折号分隔。
- 遵循Eloquent约定,如果您将 FK 设置为使用 _id,Eloquent 将不需要额外信息。因此,在您的情况下,item_user table 中的 FK 应分别为 user_id 和 item_id。
- 不需要 ItemUser 模型。您可以通过以下方式访问关系中的枢轴:
$user = User::find(1);
$user->items[0]->pivot->qty; // retrieve the quantity
我正在寻求一些帮助来解决如何为我的应用程序设置 Eloquent 关系。
我已经为三个 table 创建了迁移。
| users | | items | | user_items |
+-----------+ +-----------+ +------------+
| id | | id | | id |
| username | | name | | user_id |
| item_id |
| qty |
我在 user_items
table 上设置了唯一索引,将 1 个用户 ID 限制为 1 个项目 ID,但有一个 qty 列。我想设置 Eloquent 以便我有两个模型,用户和项目。我可以说的地方:
$item = $user->items()->first();
$name = $item->name;
$qty = $item->qty;
问题是我想弄清楚我是否需要第三个模型,是否需要 UserItem。
你在这里做的其实是一个M:M关系,而且LaravelEloquent已经支持那个out of the box. user_itemtable 你有被称为枢轴 table.
以下是使用 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');
}
}
为此,您需要三个迁移:
- 一个给用户 table
- 一个用于项目 table
- 一个用于 item_user table。在 Eloquent 中,主元 table 由两个 table 的名字按字母顺序组成。用破折号分隔。
- 遵循Eloquent约定,如果您将 FK 设置为使用 _id,Eloquent 将不需要额外信息。因此,在您的情况下,item_user table 中的 FK 应分别为 user_id 和 item_id。
- 不需要 ItemUser 模型。您可以通过以下方式访问关系中的枢轴:
$user = User::find(1); $user->items[0]->pivot->qty; // retrieve the quantity