如何在 Laravel 查询生成器上最小化“where()”。如果所有表列都是相同的值

Posted

技术标签:

【中文标题】如何在 Laravel 查询生成器上最小化“where()”。如果所有表列都是相同的值【英文标题】:How to minimize "where()" on Laravel query builder. If all table columns are all the same values 【发布时间】:2022-01-13 02:22:57 【问题描述】:

有没有办法在 laravel 查询生成器上最小化调用 ->where()?

样本表:

name item1 item2 item 3
David 0 0 0
David 1 1 2
David 1 2 2

我想删除所有表列包含 0 值的特定记录,而不删除其他记录。

我的查询是这样的。

DB::table('users')->where('name', 'David')
                  ->where('item1', 0)
                  ->where('item2', 0)
                  ->where('item3', 0)
                  ->delete();

有没有办法最小化调用->where()?就像 whereIn('columns',[1,2,3,4]) 但在列中。

【问题讨论】:

【参考方案1】:

将一组条件传递给 where 函数。数组的每个元素都应该是一个数组,其中包含通常传递给 where 方法的三个参数:

$conditions=[
  ['name','=', 'David'],
  ['item1','=',0],
  ['item2','=', 0],
  ['item3','=', 0],
]
DB::table('users')->where($conditions)->delete();

参考:https://laravel.com/docs/8.x/queries#where-clauses

【讨论】:

这就像一个魅力。谢谢。我可以在我的所有代码上使用这种技术来避免重复

以上是关于如何在 Laravel 查询生成器上最小化“where()”。如果所有表列都是相同的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 查询生成器中使隐藏属性可见?

具有多态连接的 Laravel 查询生成器在 SQLite 上不起作用

Laravel 查询生成器 - 日期现在在哪里使用碳

如何在查询生成器 laravel 中执行此 SQL

如何使用 laravel 5 中的查询生成器从子查询中进行选择

如何在 Laravel Eloquent 查询(或使用查询生成器)中为表起别名?