![](/img/trans.png)
[英]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.