我的项目中有这些模型:
class User {
public function favorites()
{
return $this->hasMany('App\Favorite');
}
}
-
class Product {
public function user()
{
return $this->belongsTo('App\User');
}
}
-
class Favorite {
public function user()
{
return $this->belongsTo('App\User');
}
public function product()
{
return $this->belongsTo('App\Product');
}
}
当我试图获得用户的最爱时,我会这样做: -
$user = User::find(1);
return $user->favorites;
或者用他最喜欢的产品: -
return $user->favorites->load('product');
但它返回两者(产品和收藏夹)的结果。
如何仅通过收藏夹从产品型号获取结果?
就像我只想检索用户添加到他最爱的产品一样?
我已经尝试在User类中创建它并且它不起作用: -
public function favproducts()
{
return this->hasManyThrough('App\Product', 'App\Favorite');
}
提前谢谢。
答案 0 :(得分:2)
这似乎可以是UIViewController
和belongsToMany
之间的User
来制作“收藏夹”,作为数据透视表。
您当前的设置缺少从Product
到Product
的反向关系,因此您无法在该方向上使用该关系。这是我用来获得你想要的结果的方向。
如果你有关系设置,你可能会这样做只是为用户的收藏夹获取产品。
Favorite
获取具有Product::whereHas('favorites.user', function ($q) use ($user_id) {
$q->where('id', $user_id);
})->get();
用户喜爱的所有产品。
如果为id == $user_id
设置了此项,则可能只需执行此操作:
belongsToMany
根据您目前拥有的内容,您可以从PHP端的结果中“获取”子记录。
答案 1 :(得分:0)
试试这个: 在你的情况下,我认为这是一个嵌套的渴望加载
$user = User::with('favorites.product')->get();
//to grab the data
dd($user->favorites[0]->product);
希望它有所帮助
答案 2 :(得分:-1)
尝试:
$user->favorites->product['name']