【问题标题】:Laravel eloquent builders merge with OR conditionLaravel eloquent builder 与 OR 条件合并
【发布时间】:2018-05-24 10:12:12
【问题描述】:

我已经构建了多个 Builder 实例。它们中的每一个都包含一些复杂的“where”条件。

我需要将它们合并到一个大型 Builder 中,以便只向数据库发出一个请求。它们都应该合并为 ( ( builder 1 ) OR (builder 2) ....) ,其中每个构建器 N 都扩展为一些 SQL 查询。

在 Yii 中我使用了这个函数 mergeWith 。我在 Laravel 中找不到类似的功能。能否请您指出我如何通过 eloquent 正确地做到这一点?

已编辑

这是single Builder 的样子,

所有其他构建器在 Where 子句中只包含不同的单词。

【问题讨论】:

  • 尝试使用“联合”laravel.com/docs/5.5/queries#unions。在这一刻,我无法用 laravel 看到其他方式。我希望我对您有所帮助
  • 我看不到应该如何为 where 子句传递诸如“OR”或“AND”之类的连接条件
  • 如果您实际发布您尝试加入的查询,这可能会有所帮助。
  • 已编辑,添加了单个查询的示例,该示例包含在其中一个构建器中。并且此构建器需要使用 OR 运算符(或 and ,取决于情况)与其他 bulders 连接
  • 感觉跟参数分组和闭包有关系,还在摸索如何

标签: php laravel eloquent laravel-5.5


【解决方案1】:

啊哈!找到了。我猜应该是这样的。 闭包内的所有内容都被插入括号中。 我们得到结果( (..) OR (...) )等

   $builderMain = collect($searchWords)->reduce(function($carry, $searchWord) 
    {
      return  $carry->orWhere(function($query) use ($searchWord)
        {

          $query->where('...');
          $query->where('...');
          $query->where('...');
          $query->where('...');
           ......
      };
  ....
  }, BigMoney::query());

如果有更好的选择,我会接受你的回答。仍然欢迎建议

【讨论】:

    猜你喜欢
    • 2020-08-15
    • 2019-10-13
    • 2021-10-05
    • 2018-08-12
    • 1970-01-01
    • 2016-12-29
    • 2022-07-06
    • 2017-03-21
    • 2019-11-26
    相关资源
    最近更新 更多