Laravel 5查询具有可变数量的where子句

时间:2017-06-13 19:25:27

标签: php jquery mysql laravel laravel-5

我尝试使用Laravel和jQuery Token-Input插件创建一个基于标签的搜索系统,类似于stackoverflow上的搜索系统。然后,“标签”的内容将用作查询本身,从不同表中的列表中提取。

使用Eloquent,我想基于搜索栏中可变数量的标签构建查询(仅限于可能的标签数量)。如果没有作为循环完成,它看起来会像这样:

$query = Model::whereHas('attribute', 'name', '=', 'tag1')
               ->whereHas('attribute', 'name', '=', 'tag2') 
               ->whereHas('attribute', 'name', '=', 'tag3')
               // Repeat until...
               ->get();

有问题的'attribute'实际上是从数据透视表中提取的内容。 显然,我希望它以循环的形式存在,因为我们正在处理可变数量的标签。我该怎么做呢?

2 个答案:

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