【问题标题】:Laravel eloquent with and with conditionLaravel 雄辩与条件
【发布时间】:2021-12-18 09:27:44
【问题描述】:

我正在尝试从类别中获取类别和选定项目。这是我的代码:

$reqItems = $request->items; //array - selected item
$categories = Category::where('type_id', 1)
     ->whereHas('items', function ($query) use ($reqItems){
         $query->whereIn('id', $reqItems);
     })
    ->with('items');
    ->get();

但这将返回所有项目,即使不是在选定项目中。

我尝试使用 foreach,它返回 null

$reqItems = $request->items; //array - selected item
$categories = Category::where('type_id', 1)->with('items');
foreach($reqItems as $reqItem) {
   $categories = $categories->whereHas('items', function ($query) use ($reqItem){
       $query->where('id', '=', $reqItem);
   });
}
$categories = $categories->get();

如何只返回选定的项目?

【问题讨论】:

标签: laravel eloquent laravel-7


【解决方案1】:

正如@lagbox 所建议的,这里是工作代码:

$reqItems = $request->items;
$categories = Category::where('type_id', 1)
->with(['items' => function ($query) use ($reqItems){
        $query->whereIn('id', $reqItems);
    }])->get();

【讨论】:

    【解决方案2】:

    当您希望预先加载关系并为预先加载查询指定其他查询条件时。您可以通过将关系数组传递给 with 方法来完成此操作,其中数组键是关系名称,数组值是为急切加载查询添加额外约束的闭包:

      $categories = Category::where('type_id', 1)
            ->whereHas('items', function ($query) use ($reqItems){
                $query->whereIn('id', $reqItems);
            })
            ->with(['items'=>function ($query) use ($reqItems){
                $query->whereIn('id', $reqItems);
            }])
        ->get();
    

    【讨论】:

    • 返回错误:mb_strpos() 期望参数 1 是字符串,给定对象
    • 是的,大括号中的错误,我已经更新了答案,请再试一次。
    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-09
    • 2014-08-15
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多