【问题标题】:Laravel polymorphic relation - returns relationLaravel 多态关系 - 返回关系
【发布时间】:2020-07-31 10:01:04
【问题描述】:

我想让有书签的用户。这意味着用户可以为帖子、文章等添加书签... 所以这是我的架构 用户 ID 书签 ID 书签ID 书签类型 用户身份 文章 ID 帖子 ID 如您所见,它是一个多态关系。

我可以为文章添加书签,这没关系。 我的问题是当我想获取用户的书签时。假设用户有 4 个已添加书签的帖子。他想见他们。

我为它写了一个关系,但它返回 []; (用户至少有一个书签帖子)

用户.php

public function bookmarks()
    {
        return $this->morphMany(Bookmark::class, 'bookmarks', 'bookmarkable_type','user_id');
    }

结果

Illuminate\Database\Eloquent\Collection {#313 ▼
  #items: []
}

这是书签模型:

 public function bookmarkable()
    {
        return $this->morphTo();
    }

    public function articles()
    {
        return $this->belongsTo(Article::class ,'bookmarkable_id','id');
    }

这就是我尝试访问书签的方式:

$articles  = auth()->user()->bookmarks;
dd($articles);

当我使用它来获取书签帖子时:

public function bookmarks()
    {
        return $this->hasOne(Bookmark::class,  'user_id','id');
    }

它将返回书签表中的记录。

【问题讨论】:

    标签: php laravel polymorphism relation


    【解决方案1】:

    您没有提供太多信息,所以我假设您的数据库架构是这样的 -

    posts
        id - integer
        name - string
    
    articles
        id - integer
        name - string
    
    users
        id - integer
        name - string
    
    bookmarkables
        bookmark_id - integer
        bookmarkable_id - integer
        bookmarkable_type - string
    

    您的 Post 和 Article 模型都需要以下关系 -

    public function bookmarked_by()
    {
        return $this->morphToMany(User::class, 'bookmarkable');
    }
    

    您的用户模型需要以下关系 -

    public function bookmarked_posts()
    {
        return $this->morphedByMany(Post::class, 'bookmarkable');
    }
    
    public function bookmarked_articles()
    {
        return $this->morphedByMany(Article::class, 'bookmarkable');
    }
    

    然后您就可以使用auth()->user()->bookmarked_postsauth()->user()->bookmarked_articles

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 2016-06-21
      • 2012-11-26
      • 2019-07-24
      相关资源
      最近更新 更多