Php 如何处理Laravel中的多轴关系?
在我的应用程序中,您可以创建附加到联系人的角色列表。因此,您可以将“园丁”和“宠物保姆”的角色分配给联系人“鲍勃”。然后,您可以创建“人”列表,并向其中添加“园丁(Bob)”和“宠物保姆(Bob)” 我有以下表格:Php 如何处理Laravel中的多轴关系?,php,laravel,laravel-8,Php,Laravel,Laravel 8,在我的应用程序中,您可以创建附加到联系人的角色列表。因此,您可以将“园丁”和“宠物保姆”的角色分配给联系人“鲍勃”。然后,您可以创建“人”列表,并向其中添加“园丁(Bob)”和“宠物保姆(Bob)” 我有以下表格: contacts id name roles id name contact_role (pivot) id contact_id role_id lists id name contact_role_list
contacts
id
name
roles
id
name
contact_role (pivot)
id
contact_id
role_id
lists
id
name
contact_role_list (pivot)
id
contact_role_id
list_id
在第二个数据透视表链接到第一个数据透视表之前,一切都很顺利。我的数据透视表(目前)没有任何模型,因此我不确定是否有内置功能来解决Laravel中的问题,或者我是否需要以不同的方式思考
我目前在我的列表模型中有:
public function list_roles(): BelongsToMany
{
return $this->belongsToMany(XYZ::class, 'contact_role_list', 'list_id', 'contact_role_id');
}
就差一点了吗?我应该把什么放在它所说的
XYZ::class
?好的,下面是我想做的,但是有更好的方法吗?解决我的问题的关键是为ContactRole
创建一个模型,并将extensedmodel
更改为extensedpivot
我把它放在我的列表中
型号:
public function list_roles(): BelongsToMany
{
return $this->belongsToMany(ContactRole::class, 'contact_role_list', 'list_id', 'contact_role_id');
}
public function contact(): BelongsTo
{
return $this->belongsTo(Contact::class);
}
在我的ContactRole
车型中:
public function list_roles(): BelongsToMany
{
return $this->belongsToMany(ContactRole::class, 'contact_role_list', 'list_id', 'contact_role_id');
}
public function contact(): BelongsTo
{
return $this->belongsTo(Contact::class);
}
现在,我可以通过如下方式访问联系人数据:List::first()->contact\u roles->first()->contact
有没有办法将
与
、pivot
或类似的工具结合使用来进一步整理这篇文章?谢谢 我喜欢从模型而不是支点的角度来探讨这些问题。我认为很多Laravel的新开发人员已经不再痴迷于数据库中发生的事情,这很好,但是有很多神奇的事情在发生,所以你可以编写非常简单的代码,完成很多繁重的工作,如果我完全理解你的问题的话
- 你有一个联系人模型
- 这个模型可以有很多角色
因此,在联系人模型中,您需要角色关系
public function roles() { return $this->belongsToMany(Roles::class); }
- 这个模型可以有很多角色
因此,在联系人模型中,您需要角色关系
public function lists()
{
return $this->hasMany(List::class)
}
现在的想法是,您在联系人上有角色,在角色上有列表,您应该能够通过联系人拥有许多列表
public function lists()
{
return $this->hasManyThrough(List::class, Role::class);
}
我以前也做过类似的事情,根据您的描述,这似乎是您可能需要采取的方法。联系人角色和列表之间的关系是什么?列表可以有多个联系人角色,还是一对一?请进一步解释这三者之间的关系性质,联系人、角色和列表。@N69S我用解释更新了帖子。列表可以有多个联系人角色,但在(联系人角色id,列表id)上是唯一的。谢谢!一个联系人可以有多个角色,并且在(联系人id,角色id)上是唯一的。你检查过hasManyThrough关系是否有帮助吗?[link]也是你建立在列表上的关系只是角色我不太理解你的模型结构是这个联系人可以有很多角色,角色可以有很多列表吗?@JordanPartridge谢谢,我正在研究hasManyThrough,尽管他们的例子似乎比我的简单一步。是的,联系人可以有许多角色,列表可以有许多联系人角色。列表和角色之间没有直接关系,列表和联系人之间也没有直接关系,它们都是通过联系人角色实现的。谢谢!我试试看。这似乎合乎逻辑,但我仍然缺少链接表(回到数据库:P)。您的示例是否能与我提到的“contact_role”和“contact_role_list”表结构一起开箱即用?假设您上一次的
list()
是在contact
模型中进行的:当我修补contact::with('list')->get()代码>我收到Illumb/Database/QueryException,消息为“SQLSTATE[42S22]:找不到列:1054未知列”角色。请在“字段列表”中使用“联系人id”(SQL:从列表中选择列表
*,角色
通过
键
通过
键联系角色在角色
id列表角色其中角色
在(1、2、3、4、5'中联系)