如何在laravel中更新多态多对多数据中心记录(使用确切的数据中心id) ?


How can I update a polymorphic many-to-many pivot record (using the exact pivot id) in laravel?

我想在枢轴级别访问我的多态(多对多)关系。比如我有:

- 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功能。这应该是很清楚的,因为你没有一个雄辩的模型为你的数据透视表。