【问题标题】:Laravel 5 query with variable number of where clausesLaravel 5查询具有可变数量的where子句
【发布时间】:2017-11-15 17:32:43
【问题描述】:

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

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

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

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

【问题讨论】:

  • 已修复。希望对您有所帮助。

标签: php jquery mysql laravel laravel-5


【解决方案1】:

我想你可以这样:

$query = Model::whereHas('attribute', 'name', '=', 'tag1');
foreach ($other_tags as $tag) {
    $query = $query->whereHas('attribute', 'name', '=', $tag);
}
print_r($query->get());

这里唯一的提示是你需要使用first标签来初始化Model::whereHas。其他标签可以迭代,每一个都会添加到$query

【讨论】:

    【解决方案2】:

    如果你的数组中有这样的标签

    $tags = [ 'tag1', 'tag2', 'tag3', 'tag4', ...];
    

    那么你可以简单地使用 whereIn

    $results = Model::whereHas('attribute', function($query) use ($tags) {
        $query->whereIn('name', $tags);
    })->get();
    

    【讨论】:

      猜你喜欢
      • 2016-01-04
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多