我在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不存在。”
我怎么了?
答案 0 :(得分:2)
我认为最好的方法是稍微扭转一下思路。从产品模型(需要产品集合)开始,然后使用whereHas
浏览书签,并按当前用户ID向下过滤。
$bookmarkedProducts = Product::whereHas('bookmarks', function($q) {
$q->where('user_id', auth()->id());
});