Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何处理Laravel中的多轴关系?_Php_Laravel_Laravel 8 - Fatal编程技术网

Php 如何处理Laravel中的多轴关系?

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

在我的应用程序中,您可以创建附加到联系人的角色列表。因此,您可以将“园丁”和“宠物保姆”的角色分配给联系人“鲍勃”。然后,您可以创建“人”列表,并向其中添加“园丁(Bob)”和“宠物保姆(Bob)”

我有以下表格:

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'中联系)