我想在数据透视级别访问我的多态(多对多)关系。让我们说:
- 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
请注意'第3页'有两篇文章1'。页面可以包含多个相同文章或引号。实际上,这就是为什么我需要使用它的完全行ID来更新完全数据透视表。是的我可以使用sync()方法,但它会删除所有重复的记录。即使我使用syncWithoutDetaching(),我也无法更新我想要的确切数据透视表。另一方面,我尝试了updateExistingPivot()方法,但它也没有更新(确切的)数据透视表。例如:
\App\Article::find(1)->pages()->updateExistingPivot(3, ['page_id'=>1]);
这里假设第一个参数是页面的id而不是枢轴行本身的id(通常枢轴表根本没有id)。
有没有任何荒凉的方式来做到这一点? (除了使用流畅的查询构建器或首先不接受重复记录:))
答案 0 :(得分:1)
你可以这样做:
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模型。