【发布时间】:2017-12-06 05:22:14
【问题描述】:
我的项目中有这些模型:
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');
}
提前谢谢你。
【问题讨论】:
-
你想通过雄辩来做吗,因为你可以通过查询来做。
-
是的,我知道我可以使用连接和类似的东西来做到这一点,但我更喜欢以雄辩的方式来做到这一点。
-
你可以试试
$user->favorites()->with('product')->get() -
这和 $user->favorites->load('product'); 完全一样这将为我返回两个模型,我只需要没有收藏夹模型的产品
-
这应该只是它们之间的数据透视表吗?并且您没有在 Product 上定义
favorites关系。无法在您的设置中从产品转到收藏夹,这就是如何获得您想要的东西。