当前位置: 首页 > 面试题库 >

如何使用Laravel Eloquent创建多个Where子句查询?

陈淳
2023-03-14
问题内容

我正在使用Laravel Eloquent查询构建器,并且在一个查询中需要WHERE多个条件的子句。它可以工作,但并不优雅。

例:

$results = User::where('this', '=', 1)
    ->where('that', '=', 1)
    ->where('this_too', '=', 1)
    ->where('that_too', '=', 1)
    ->where('this_as_well', '=', 1)
    ->where('that_as_well', '=', 1)
    ->where('this_one_too', '=', 1)
    ->where('that_one_too', '=', 1)
    ->where('this_one_as_well', '=', 1)
    ->where('that_one_as_well', '=', 1)
    ->get();

有没有更好的方法可以执行此操作,还是应该坚持使用此方法


问题答案:

在Laravel 5.3中从6.x开始仍然适用,您可以使用更细粒度的wheres作为数组传递:

$query->where([
    ['column_1', '=', 'value_1'],
    ['column_2', '<>', 'value_2'],
    [COLUMN, OPERATOR, VALUE],
    ...
])

就个人而言,我并没有在多个where调用中找到用例,但事实是您可以使用它。

自2014年6月起,您可以将数组传递给where

只要您想要所有wheres使用and运算符,就可以通过以下方式将它们分组:

$matchThese = ['field' => 'value', 'another_field' => 'another_value', ...];

// if you need another group of wheres as an alternative:
$orThose = ['yet_another_field' => 'yet_another_value', ...];

然后:

$results = User::where($matchThese)->get();

// with another group
$results = User::where($matchThese)
    ->orWhere($orThose)
    ->get();

上面将导致这样的查询:

SELECT * FROM users
  WHERE (field = value AND another_field = another_value AND ...)
  OR (yet_another_field = yet_another_value AND ...)


 类似资料:
  • 我正在使用Laravel Eleoquent查询生成器,并且我有一个查询where我想要一个关于多个条件的子句。很管用,但不优雅。 示例: 有没有更好的方法做到这一点,还是我应该坚持这个方法?

  • 下面是我开始使用的代码,但我不确定该去哪里。看看这个问题的解决方案,我似乎需要根据下面的查询下载数据,然后在客户端对其进行排序。我似乎做不到的事

  • 问题内容: 我正在尝试检索仅在到达日期和机场匹配时才返回飞行数据的数据。我似乎无法找出最佳解决方案。我只能在机场或到达日期相同的地方提取数据,而不能在两者都提取(只能使用一次)。这是我当前的Java代码如下所示: 这是数据本身: 当前的Java代码将返回 仅 具有相同机场的所有子级。如您所料,当客户端需要排序的数据量比上述测试数据大得多时,这是不可行的。如何更好地在Firebase端过滤数据? 问

  • 问题内容: Spring数据中是否有一种方法可以动态形成where子句? 我想做的是有一个方法(类似于findBy / get方法),该方法运行WHERE和AND并使用所提及的NOT NULL属性。 例如, 我们的方法看起来像这样 谢谢。 问题答案: 看看Spring数据存储库都支持的JPA规范和谓词,甚至更好的QueryDSL。本文提供了一个示例:http : //spring.io/blog/

  • 问题内容: 我有以下只需1秒即可执行的sql查询: 但是我需要一个结果集来获取比率大于0的结果。因此,当我将查询更改为此时,需要7分钟的时间来执行: 为什么这会使查询时间从1秒增加到7分钟?由于b表很大,因此我什至尝试使用CTE,但这也没有提高性能。我认为使用CTE可以从中筛选出较小的一组值,因此应该更快一些,但这无济于事: 我不能包括执行计划,因为除了查询之外,我没有对数据库的权限。 问题答案:

  • 由于在抽象中解释我要做什么有点困难,所以我克隆了spring-boot-sample-data-jpa项目,并对其进行了修改,以展示我正在尝试做什么的示例。 我有这些模型类,您将注意到和扩展了实体。 我正在尝试编写一个查询,返回包含或的所有城市,其主要运动是给定类型的。 我编写了一个JPQL版本的查询,它有点难看(我不喜欢部分来表示它是一家水疗酒店),但似乎返回了我想要的。 但该查询的QueryD