Laravel 雄辩与条件
Posted
技术标签:
【中文标题】Laravel 雄辩与条件【英文标题】:Laravel eloquent with and with condition 【发布时间】: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();
如何只返回选定的项目?
【问题讨论】:
您可以将用于whereHas
的相同闭包应用到with
...约束急切负载:laravel.com/docs/7.x/…
【参考方案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 是字符串,给定对象 是的,大括号中的错误,我已经更新了答案,请再试一次。以上是关于Laravel 雄辩与条件的主要内容,如果未能解决你的问题,请参考以下文章