我想在枢轴级别访问我的多态(多对多)关系。比如我有:
- pages
id - title
- articles
id - title - body
- quotes
id - title - body
- pageables
id - order - pageable_type - pageable_id - page_id
现在你可以看到,我有可以有文章和引用的页面。这样我就可以按顺序调用页面及其内容(文章和引用)。例如:
page1
article1
quote3
page2
article2
quote1
page3
article1
quote1
article1
注意'page3'有两个'article1'。一个页面可以有多个相同的文章或引用。实际上,这就是为什么我需要更新确切 pivot使用它的确切行id。是的,我可以使用sync()方法,但它会删除所有重复的记录。即使我使用syncWithoutDetaching(),我也无法更新我想要的确切枢轴。另一方面,我尝试了updateExistingPivot()方法,但它也不更新(确切的)枢轴。例如:
'App'Article::find(1)->pages()->updateExistingPivot(3, ['page_id'=>1]);
这里假设第一个参数是页面的id,而不是数据透视行本身的id(通常数据透视表根本没有id)。
有什么巧妙的方法可以做到吗?(除了使用流畅查询生成器或不接受重复记录:))
你可以这样做:
public function pages()
{
return $this->belongsToMany('Page')->withPivot('row_id', 'other_field_in_pivot_table_you_need');
}
'App'Article::find(1)
->pages()
->newPivotStatement()
->where('row_id', $your_row_id)
->update(['order' => 5]);
newPivotStatemant()
将是Query'Builder
的对象,因此在这种情况下您将没有任何Eloquent功能。这应该是很清楚的,因为你没有一个雄辩的模型为你的数据透视表。