Mysql Laravel雄辩的三表关系

Mysql Laravel雄辩的三表关系,mysql,laravel,database-design,laravel-5,laravel-5.3,Mysql,Laravel,Database Design,Laravel 5,Laravel 5.3,我正在寻找一些帮助,帮助我解决如何为我的应用程序建立雄辩的关系 我已经为三个表创建了迁移 | users | | items | | user_items | +-----------+ +-----------+ +------------+ | id | | id | | id | | username | | name | | user_id |

我正在寻找一些帮助,帮助我解决如何为我的应用程序建立雄辩的关系

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

| users     |   | items     |   | user_items |
+-----------+   +-----------+   +------------+
| id        |   | id        |   | id         |
| username  |   | name      |   | user_id    |
                                | item_id    | 
                                | qty        | 
我在
user\u items
表上设置了一个唯一索引,将1个用户id限制为1个item id,但带有一个qty列。我想设置雄辩,使我有两个模型,用户和项目。我可以说:

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

问题是我正在试图弄清楚我是否需要第三个模型,UserItem与否。

您在这里做的实际上是一个m:m关系,并且Laravel Eloquent已经支持这一点,您拥有的user_item表被称为pivot表

以下是如何用雄辩的语言建立你们的关系

// 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_用户表。在Eloquent中,pivot表由两个按字母顺序排列的表名组成。以破折号分开
  • 遵循雄辩的约定,如果将FK设置为使用_id,雄辩将不需要其他信息。因此,在您的例子中,item_user表中的FK应该分别是user_id和item_id
  • 不需要ItemUser模型。您可以通过以下操作访问关系中的轴:

谢谢你Exrakun,pivot语法正是我想要的。
$user = User::find(1);
$user->items[0]->pivot->qty; // retrieve the quantity