Laravel与枢轴的多态关系

时间:2019-03-29 18:06:04

标签: php laravel eloquent relationship

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

- 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 个答案:

答案 0 :(得分:0)

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