Laravel Eloquent-无法查询与所有权的关系

时间:2018-10-26 04:21:40

标签: laravel eloquent

我想获取所有类别,并且在这些类别内,仅获取属于已登录用户的项目。如果没有,则该类别仍应存在。

这是我尝试过的。仍在从其他用户那里获取商品。

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

3 个答案:

答案 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();