Php 如何仅访问具有即时加载的相关模型

Php 如何仅访问具有即时加载的相关模型,php,laravel,orm,eloquent,Php,Laravel,Orm,Eloquent,我的项目中有这些模型: class User { public function favorites() { return $this->hasMany('App\Favorite'); } } - - 当我尝试获取用户的收藏夹时,我会这样做:- $user = User::find(1); return $user->favorites; 或者使用他最喜欢的产品:- return $user->favorites->lo

我的项目中有这些模型:

class User {

    public function favorites()
    {
        return $this->hasMany('App\Favorite');
    }

}
-

-


当我尝试获取用户的收藏夹时,我会这样做:-

$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->product['name']
试试这个: 在您的情况下,我认为这是一个嵌套的加载

$user = User::with('favorites.product')->get();
//to grab the data
dd($user->favorites[0]->product);

希望对您有所帮助

这似乎是
用户
产品
之间的一个
归属
来制作一个“收藏夹”,作为数据透视表

您当前的设置缺少从
产品
收藏夹
的反向关系,因此您无法在该方向使用该关系。这是我用来得到你想要的结果的方向

如果您设置了关系,那么您可以这样做,以便只获取用户收藏夹的产品

Product::whereHas('favorites.user', function ($q) use ($user_id) {
    $q->where('id', $user_id);
})->get();
使用
id==$user\u id
获取所有具有用户收藏夹的产品

如果这是为一个
目录设置的
,您可能只需执行以下操作:

User::find($id)->favorites;

使用您当前拥有的,您可以从PHP端的结果中“获取”子记录。

您想通过eloquent来完成吗,因为您可以通过查询来完成。是的,我知道我可以使用连接和类似的东西来完成,但我更喜欢通过eloquent来完成。您可以使用('product')->get()尝试
$user->favorites()->
这与$user->favorites->load('product')完全相同;这将为我返回两个模型,我只需要没有收藏夹模型的产品。这应该只是它们之间的数据透视表吗?而且您没有在产品上定义
收藏夹
关系。无法在设置中从产品转到收藏夹,这是获取所需内容的方法。这将尝试访问集合的
Product
属性
Product::whereHas('favorites.user', function ($q) use ($user_id) {
    $q->where('id', $user_id);
})->get();
User::find($id)->favorites;