簡體   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