Php 通过轴心关系拉威尔多对多。

Php 通过轴心关系拉威尔多对多。,php,laravel,eloquent,Php,Laravel,Eloquent,使用者 液体 提供者 pid 决议 摆脱 提供者解析 Prid pid 摆脱 忙碌的 提供者解析器 Prid 液体 试图与此建立一种雄辩的关系 我试图找出如何让用户适应这个模型。看来这应该是一件好事。我是否需要创建一个表示轴的类 那么从用户的情况来看,我将如何查询列表分辨率?您没有问,但我个人认为,让每个表的主键为“id”要容易得多。此外,在ProviderResolution的情况下,除非您有特定的情况,否则您根本不需要也不应该使用“prid”。仅“pid”、“rid”和“active”就足够

使用者

液体 提供者

pid 决议

摆脱 提供者解析

Prid pid 摆脱 忙碌的 提供者解析器

Prid 液体 试图与此建立一种雄辩的关系

我试图找出如何让用户适应这个模型。看来这应该是一件好事。我是否需要创建一个表示轴的类


那么从用户的情况来看,我将如何查询列表分辨率?

您没有问,但我个人认为,让每个表的主键为“id”要容易得多。此外,在ProviderResolution的情况下,除非您有特定的情况,否则您根本不需要也不应该使用“prid”。仅“pid”、“rid”和“active”就足够了。“pid”和“rid”各自构成复合主键。如果您添加了另一个键“prid”,那么将有一个三键组合,从技术上讲,它将使您能够与其他两个主键具有重复项。讨厌。示例:PRID:1,PID:1,RID:1,然后PRID:2,PID:1,RID:1。现在,您有了副本,但由于PRID密钥,您的记录在技术上仍然是唯一的。但是,也许你出于某种原因想要这样

对于答案,我假设您使用的是Laravel 5.4+。 所以首先,你不需要一个类作为轴心。其次,您当前正试图通过创建一个名为“Provider\u Resolution\u user”的表,在Provider和Resolution之间创建用户与现有透视表之间的关系。如果要为用户查询解决方案,只需使用关系方法即可访问数据透视表和相关模型/表上的属性

首先,在这两个类中设置“hasMany”关系:用户和分辨率提供程序已经与分辨率有关系,因此如果您想查看相关的提供程序,可以使用该关系。然后需要一个名为“resolution_user”的透视表。将“uid”和“rid”放在表中。将对应外键字段的关系设置为其父表

现在,您可以直接访问关系,如:

$user->resolutions->rid或任何您想要的属性

上一个示例假设您已经创建了一种将记录插入到数据透视表resolution_user中的方法,该数据透视表resolution_user将用户和解析关联在一起

如果要访问数据透视表上的一个属性,“数据透视”将使用数据透视表中自己的属性创建一个对象实例。您可以这样访问它:

$user->resolutions->pivot->active

当然,这些方法是可链接的,因此如果您只想查看活动分辨率,还可以添加->where语句

希望这有帮助,不要太泥泞。如果需要,我很乐意澄清任何观点

编辑答案:


因为您要做的是禁用provider_resolution表中的一行,并使其反映在正确的用户上,然后在用户模型和resolution模型中创建一个关系。因此,当您禁用provider_resolution pid、rid、active中的一行时,可以使用分辨率和用户之间的反向关系查找要更新的适当用户。这将为您提供分配给该特定分辨率/提供程序组合的用户。如果出于某种原因,您确实需要根据解析和提供者这两种唯一组合来查找用户,那么我们可能需要讨论多态关系。让我知道。

你能不能创建一个表ProviderResolutionUser pid rid uid active?实际上不能。如果用户处于非活动状态,我需要能够禁用ProviderResolution。我还需要向用户提供它们的列表。谢谢!第一我的表确实有id作为增量。我在这里更改了它以帮助澄清问题。其次,prid作为与用户表的关系存在。pid、rid具有唯一的约束,因此它们不应重复。我不确定我是否理解你想说的话。我希望能够禁用ProviderResolution行,然后将其反映到用户上。我不明白你们的关系是怎么做到的。您的用户->分辨率->透视->活动将访问分辨率\用户权限中的活动字段?我想我现在清楚了。您最初的问题是“从用户的情况来看,我如何查询[一组]分辨率?”这与禁用provider_resolution中的行以及反映用户的行略有不同。但是,我仍然认为您可以简单地将用户与rid关联,并使用分辨率和用户之间的反向关系来标识禁用的分辨率/提供者行的用户。您不需要将用户与resolution_provider表关联,因为在resolution_provider表中查找与分辨率直接相关的用户即可。是的,这很有意义。让我试试 祝你好运,先生,让我知道情况如何@RyanKnopp
class Provider extends Model {  

    public function resolutions()
    {
        return $this->belongsToMany('App\Models\Resolution')->withPivot('active')->withTimestamps();
    }

}

class Resolution extends Model {

    public function providers()
    {
       return $this->belongsToMany('App\Models\Provider')->withPivot('active')->withTimestamps();
    }
}

 class User extends Model 
 {

 }