如何获得具有多对多关系的 table 的所有结果
How to get all results of a table with Many To Many relationship
我正在开发一个在线商店项目,我想创建添加到收藏夹 系统,以便用户将他们喜欢的产品添加到他们的收藏夹列表中。
所以我创建了一个名为 favourite_products
的 table,它是这样的:
所以usr_id
代表用户id,prd_id
代表产品id。
现在我想从这个 table 中获取所有数据。
所以我尝试将其添加到控制器中:
$userFavourites = new User();
dd($userFavourites->favourites);
但它没有 return 数据并显示为空 collection:
Illuminate\Database\Eloquent\Collection {#2862 ▼
#items: []
}
但是那里已经存在数据。
所以我的问题是,如何在具有用户多对多关系的 table 中显示来自 favourite_products
的所有结果?
这是User.php
型号:
public function favourites()
{
return $this->belongsToMany(Product::class, 'favourite_products', 'usr_id', 'prd_id')->withTimestamps();
}
这是 Product.php
型号:
public function favouritees()
{
return $this->belongsToMany(User::class, 'favourite_products', 'prd_id', 'usr_id');
}
如果您的目标是获得所有用户最喜欢的产品,请执行
Product::whereHas('favouritees')->get();
你也可以用它来统计
Product::whereHas('favouritees')->withCount('favouritees')->get();
我正在开发一个在线商店项目,我想创建添加到收藏夹 系统,以便用户将他们喜欢的产品添加到他们的收藏夹列表中。
所以我创建了一个名为 favourite_products
的 table,它是这样的:
所以usr_id
代表用户id,prd_id
代表产品id。
现在我想从这个 table 中获取所有数据。
所以我尝试将其添加到控制器中:
$userFavourites = new User();
dd($userFavourites->favourites);
但它没有 return 数据并显示为空 collection:
Illuminate\Database\Eloquent\Collection {#2862 ▼
#items: []
}
但是那里已经存在数据。
所以我的问题是,如何在具有用户多对多关系的 table 中显示来自 favourite_products
的所有结果?
这是User.php
型号:
public function favourites()
{
return $this->belongsToMany(Product::class, 'favourite_products', 'usr_id', 'prd_id')->withTimestamps();
}
这是 Product.php
型号:
public function favouritees()
{
return $this->belongsToMany(User::class, 'favourite_products', 'prd_id', 'usr_id');
}
如果您的目标是获得所有用户最喜欢的产品,请执行
Product::whereHas('favouritees')->get();
你也可以用它来统计
Product::whereHas('favouritees')->withCount('favouritees')->get();