簡體   English   中英

如何快速加載相關模型

[英]How to access only the related model with eager loading

我的項目中有以下模型:

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');
}


先感謝您。

看起來這可能是UserProduct之間的一個belongsToMany “收藏夾”的belongsToMany ,作為數據透視表。

您當前的設置缺少從ProductFavorite的逆關系,因此您不能在該方向上使用該關系。 這是我用來獲得所需結果的方向。

如果您有關系設置,則可能會這樣做,只是獲得用戶喜歡的產品。

Product::whereHas('favorites.user', function ($q) use ($user_id) {
    $q->where('id', $user_id);
})->get();

獲取所有具有id == $user_id用戶喜愛的產品。

如果這是為belongsToMany設置的, belongsToMany可以執行以下操作:

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

利用當前擁有的資源,您可以從PHP方面的結果中“獲取”子記錄。

試試這個:在您的情況下,我認為這是一個嵌套的渴望加載

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

希望有幫助

嘗試:

$user->favorites->product['name']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM