Laravel 5,雄辩的关系/方法不存在

时间:2018-07-21 18:22:50

标签: php laravel laravel-5 eloquent polymorphism

我在laravel 5.6中有3张桌子

第一张表

//Table1> users: id | name
//and in Model: User
public function bookmarks()
{
   return $this->hasMany(Bookmark::class);
}

第二张表

//Table 3> bookmarks: user_id  | bookmarkable_id  | bookmarkable_type     
// and in Model: Bookmark
public function user()
{
    return $this->belongsTo(User::class);
}

public function products()
{
    return $this->morphedByMany('App\Product', 'bookmarkable');
}

第三张表

//Table3> products: id | title | user_id
//and in Model: Product
public function user()
{
    return $this->belongsTo(User::class);
}

public function bookmarks()
{
    return $this->morphToMany('App\Bookmark', 'bookmarkable');
}

现在,我要返回当前用户的所有加标签的产品:

$products = auth()->user()->bookmarks()->products()->latest()->paginate(18);

但是我得到这个错误:

  

“方法Illuminate \ Database \ Query \ Builder :: products不存在。”

我怎么了?

1 个答案:

答案 0 :(得分:2)

我认为最好的方法是稍微扭转一下思路。从产品模型(需要产品集合)开始,然后使用whereHas浏览书签,并按当前用户ID向下过滤。

$bookmarkedProducts = Product::whereHas('bookmarks', function($q) {
    $q->where('user_id', auth()->id());
});