我想获取所有类别,并且在这些类别内,仅获取属于已登录用户的项目。如果没有,则该类别仍应存在。
这是我尝试过的。仍在从其他用户那里获取商品。
$categories = Category::parents()
->with(['lineItems' => function ($query) use($id) {
$query->where('user_id', $id);
}])->get();
找不到任何有效的方法。 (使用laravel 5.7)
关系
类别
public function lineItems()
{
return $this->hasMany(LineItem::class);
}
LineItems
public function category()
{
return $this->belongsTo(Category::class);
}
public function user()
{
return $this->belongsTo(User::class);
}
答案 0 :(得分:0)
我不确定::parents()
方法的来源(我在任何地方都找不到它的文档;这是您写的吗?),但看起来像
$categories = Category::all()
->with(['lineItems' => function ($query) use ($id) {
$query->where('user_id', $id);
}])->get();
可以工作吗?
答案 1 :(得分:0)
因此,特拉维斯(Travis)的问题使我思考了自己的循环。我的with
影响了我的顶级类别,该类别下的子项没有where
用户。可能有一种更优雅的方法可以做到这一点,但这最终奏效了。
这将查询子项的订单项和孙子项的订单项。
$categories = Category::parents()->ordered()
->with(['children.lineItems' => function($q) use($id) {
$q->where('user_id', '=', $id);
}, 'children.children.lineItems' => function($q) use($id) {
$q->where('user_id', '=', $id);
}])->get();
答案 2 :(得分:0)
尝试一下:
$categories = Category::parents()
->whereHas('lineItems', function ($query) use($id) {
$query->where('user_id', $id);
})->get();