繁体   English   中英

当外键相同时,如何让 Laravel 知道 2 个(或多个)多对多关系是不同的

[英]How to let laravel know that 2 (or many) many-to-many relationships are different when foreign keys are same

首先,我英语不好,很抱歉。

在我的情况下,我通过a_b表从a表到b表有很多关系。 a 上的一行可以belongToMany ba belongToMany行,并用a_btype区分它们。

class A extends Model
{
   public function bs
   {
       return $this->belongToMany(B::class)
                   ->withPivot(['type']);
   }
}

class B extends Model
{
   public function as
   {
       return $this->belongToMany(A::class)
                   ->withPivot(['type']);
   }
}

当我在该关系上运行sync方法时会出现问题,laravel 无法区分我关联的 2 个关系是否具有相同的外键但 diff type

A::find(1)->bs()->sync([
   B::find(1)->id => ['type'=>1],
   B::find(1)->id => ['type'=>2],
])

A::find(1)->bs()->where('id', 1)->count() // is 1 but I want it is 2 

尝试使用bs而不是bs() ,否则,您将使用方法链接,并且where()条件将作为查询构建器应用于相关模型而不是关系集合。

A::find(1)->bs->where('id', 1)->count();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM