【发布时间】:2021-09-15 21:23:26
【问题描述】:
我正在尝试构建一个过滤函数,该函数会根据用户选择的功能返回交换列表。每个特性都有一个唯一的 slug,$featureSlugs 包含这些 slug(字符串)的数组。
$featureSlugs = ['security', 'mobile-app', '2FA'];
$exchanges = Exchange::whereHas('features', function ($q) use ($featureSlugs) {
$q->where('slug', $featureSlugs);
})->get();
非常奇怪的是,此查询适用于 1 个或 2 个功能,但超过 2 个的任何内容都停止工作并且不再过滤。
我希望过滤器越来越窄,因此对每个功能使用多个 where 语句,只返回包含用户选择的所有功能的交换。这是我正在尝试的代码,但它不起作用,但我认为演示了我正在尝试做的事情:
$exchanges = Exchange::whereHas('features', function ($q) use ($featureSlugs) {
foreach($featureSlugs as $featureSlug)
{
$q->where('slug', $featureSlug);
}
})->get();
如何为数组中的每个 featureSlug 放置多个 where 语句?
【问题讨论】:
-
我的建议是你不要这样做,最好事先检查 slugs 然后使用条件
whereIn('slug', $array_of_slugs) -
whereIn 的问题是它将返回列表中至少包含 1 个功能的任何交换,而不是仅与所有 3 个功能交换