我知道你可以用 $this->belongs_to()
, $this->has_many()
等相当容易地定义表关系,但我不明白的是如何创建关系表;将两个表绑定在一起的表(我忘了这个术语的名称) .
让's say i' m创建一个用户表 . 我希望该用户属于某个"Role" . 有多个角色,每个角色可以有多个用户 . 我还需要为此创建一个 roles
表 . 到现在为止还挺好 .
但在阅读文档后,它说我应该在模型中添加 $this->belongs_to()
,而不是迁移本身 . 何时以及如何创建关系表?如果我创建 roles
和 users
表,并添加 $this->belongs_to('roles')
到 users
模型, $this->has_many('users')
到 roles
模式,将中间表自动创建?
6 回答
据我所知,不会创建任何关系表 . 您需要做的是在
users
表上有一个role_id
,这样当您创建用户时,角色的ID将存储在那里 . 这将使您能够选择所有role_id == '1'
或其他任何用户 . 例如:在
ROLES
表上ID='1'
的记录是admin . 所以再次回答你的问题,没有创建关系表,而是在每个用户的role_id
列形式的两个表中存在关系 . 出于兴趣,你使用外键吗?如果你想有一个关系表,你可以创建一个名为
user_roles
或东西,存储role_id
和user_id
在那里,但我认为它更容易使用上面的方法,那么你可以使用所有的Laravel /雄辩善良 .希望这可以帮助 :)
创建迁移时,您可以在表上指定外键,即
这将在roles表的user_id列上创建一个外键 . 外键的好处是,当进行更新或删除时,外键表将自动更新或"cascaded"找到了很好的描述here
如Laravel文档中所述,您还可以使用以下语法指定更新时的级联
我会尝试解释它比文档更好,所以请阅读Eloquent ORM文档的"Relationships"部分,看看它是如何完成的 .
看起来好像从未回答过一些初始问题,即“何时以及如何创建关系表”和“将自动创建中间表”:
据我所知,这些表需要手动创建 . 因此,像这样创建迁移文件:
Laravel 5
Laravel 4
请注意,名称是单数,并按字母顺序显示 .
然后在迁移中,例如:
希望有所帮助 . 我不确定数据透视表是否需要时间戳,所以请试验一下 .
虽然它是一个旧帖子,但我可以提供更新的内容 . 对于Laravel5, Jeffrey Way 开发了一个包 Laravel5 Generators-extended ,它增强了
php artisan
的生成器功能make:migration:schema
make:migration:pivot
make:seed
对于用户和角色之间的多对多关系,您可以使用
它将生成所需的迁移类 . 您无需为此手动编码 .
这段视频帮助了我 .
https://laracasts.com/series/laravel-5-fundamentals/episodes/14
令我惊讶的是,只有关系的一方需要在迁移表中使用pointer_id,而不是两者 . 例如,如果我们有许多文章的作者,我们只添加
文章迁移就是这样 .
我知道这是一个老帖子,但我心里也有同样的问题 . 我在Laravel manual (5.0)中找到了解决方案,其中描述了对于这种特定的多对多关系,您可以手动创建表,然后以这种方式将关系类型声明为Model:
或者如果您想使用特定的关联键:
希望这可以提供帮助 .