如何在 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 查询生成器在 SQLite 上不起作用