[英]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');
}
先感謝您。
看起來這可能是User
和Product
之間的一個belongsToMany
“收藏夾”的belongsToMany
,作為數據透視表。
您當前的設置缺少從Product
到Favorite
的逆關系,因此您不能在該方向上使用該關系。 這是我用來獲得所需結果的方向。
如果您有關系設置,則可能會這樣做,只是獲得用戶喜歡的產品。
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.