繁体   English   中英

Laravel 多态关系 - 返回关系

[英]Laravel polymorphic relation - returns relation

我想让有书签的用户。 这意味着用户可以为帖子、文章等添加书签...所以这是我的模式用户 id 书签 id bookmarkable_id bookmarkable_type user_id 文章 id 帖子 id 如您所见,它是一个多态关系。

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

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

用户.php

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

这是结果

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

这是书签 model:

 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');
    }

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

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

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');
}

您的用户 model 然后需要以下关系 -

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM