我有以下数据库:
简单来说,用户有很多商店,商店有很多产品等。 我需要借助雄辩的ORM进行此查询:
SELECT * FROM tmp.shops
INNER JOIN
(SELECT * FROM tmp.products
WHERE tmp.products.shop_id IN
(SELECT id FROM shops where user_id = 1)) as nested_query
ON tmp.shops.id = nested_query.shop_id;
我需要在用户商店中获取有关每种产品的信息以及关于商店的信息。
关于我的模特。这与用户模型中的商店有关
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function shop()
{
return $this->hasMany('App\Shop');
}
这是商店模型中的关系:
public function user()
{
return $this->belongsTo('App\User');
}
public function products()
{
return $this->hasMany('App\Product');
}
最后,产品型号:
public function shop()
{
return $this->belongsTo('App\Shop');
}
答案 0 :(得分:1)
渴望将您在产品模型中定义的商店的关系(with('shop')
)加载为
$user_id=1;
$products = Product::with('shop')
->whereHas('shop.user', function ($query) use($user_id) {
$query->where('id', '=', $user_id);
})
->get();
模型
class Product extends Model {
public function shop() {
return $this->belongsTo('Shop', 'shop_id');
}
}
class Shop extends Model {
public function user() {
return $this->belongsTo('User', 'user_id');
}
public function products() {
return $this->hasMany('Product', 'shop_id');
}
}
现在,当您迭代products
时,将在每个产品对象中获得商店详细信息对象