Laravel 与枢轴的多态关系

Posted

技术标签:

【中文标题】Laravel 与枢轴的多态关系【英文标题】:Laravel polymorphic relationship with pivot 【发布时间】:2019-08-20 17:42:27 【问题描述】:

假设我有多个用户可以看到的帖子和视频。

- users
  - id

- posts
  - id

- videos
  - id

- user_accessables (pivot)
  - id
  - user_id
  - accessable_id
  - accessable_type

在这样的例子中,我已经这样设置了我的用户关系,但感觉有些不对

class User extends Model 
    public function posts() 
         return $this->morphedByMany(
                       Post::class,
                       'accessable',
                       'user_accessables'
         );
    

    public function videos() 
         return $this->morphedByMany(
                       Video::class,
                       'accessable',
                       'user_accessables'
         );
    


   public function allowedEntities() 
       return ($this->posts)->merge($this->videos);
   

使用allowedEntities(),我可以得到两个模型的集合。

但是,我认为使用多态关系是通过关系返回实体的集合,而不是需要组合关系,对吧?

我在使用数据透视表理解多态时遇到问题(文档中的标记示例似乎不是相同的场景)。

因为现在我做不到:

$collection = collect(); // multiple models of Video & Post
$user->allowedEntities()->sync($collection);

【问题讨论】:

你的关系是正确的。无法定义返回所有相关模型组合的关系。 【参考方案1】:

正如@Jonas Staudenmeir 所说,不可能有一个返回所有相关模型的关系,但是您可以在模型上定义一个方法,该方法返回一个包含您需要的所有实体的查询构建器对象(在文档上搜索)。

【讨论】:

以上是关于Laravel 与枢轴的多态关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8:在空的多对多关系中使用枢轴时出错

Laravel 关系上的枢轴关系 (Eloquent)

Laravel 枢轴关系

Laravel:向枢轴模型添加关系

Laravel中的多重关系(枢轴)

Laravel Eloquent Query 包含枢轴和关系