我尝试使用Laravel和jQuery Token-Input插件创建一个基于标签的搜索系统,类似于stackoverflow上的搜索系统。然后,“标签”的内容将用作查询本身,从不同表中的列表中提取。
使用Eloquent,我想基于搜索栏中可变数量的标签构建查询(仅限于可能的标签数量)。如果没有作为循环完成,它看起来会像这样:
$query = Model::whereHas('attribute', 'name', '=', 'tag1')
->whereHas('attribute', 'name', '=', 'tag2')
->whereHas('attribute', 'name', '=', 'tag3')
// Repeat until...
->get();
有问题的'attribute'
实际上是从数据透视表中提取的内容。
显然,我希望它以循环的形式存在,因为我们正在处理可变数量的标签。我该怎么做呢?
答案 0 :(得分:1)
我想你可以这样:
$query = Model::whereHas('attribute', 'name', '=', 'tag1');
foreach ($other_tags as $tag) {
$query = $query->whereHas('attribute', 'name', '=', $tag);
}
print_r($query->get());
此处唯一的提示是您需要使用第一个标记来初始化Model::whereHas
。其他标签可以迭代,每个标签都会添加到$query
。
答案 1 :(得分:0)
如果您有像这样的数组
$tags = [ 'tag1', 'tag2', 'tag3', 'tag4', ...];
然后你可以简单地使用whereIn
$results = Model::whereHas('attribute', function($query) use ($tags) {
$query->whereIn('name', $tags);
})->get();