[英]Laravel select() returns empty value with Polymorphic relation and Cross Join
[英]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_posts
和auth()->user()->bookmarked_articles
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.