如何通过Laravel Eloquent实现满足列间运算关系的prices表查询?
Laravel Eloquent实现指定查询的方法
问题背景
我有一个名为prices的MySQL表,结构及数据如下:
Name | price | amount | total ------------------------------- name1 | 15 | 2 | 17 name2 | 20 | 3 | 20 name3 | 25 | 4 | 29 name4 | 30 | 5 | 35
需要获取满足price与amount之和等于total的记录的Name字段(对应name1和name3),原生SQL语句为:SELECT Name FROM prices WHERE price + amount = total。想知道拥有Price模型的情况下,能否用Laravel Eloquent实现该查询?
实现方案
完全可以用Eloquent实现,这里提供两种常用写法:
- 使用
whereRaw直接传入原生条件
这种方式最直观,直接把原生SQL的条件部分传入whereRaw方法:
$names = Price::select('Name') ->whereRaw('price + amount = total') ->pluck('Name');
pluck('Name')会直接返回包含所有符合条件的Name值的集合,和原生SQL查询结果一致。
- 结合
DB::raw构造查询条件
如果更倾向于Eloquent的链式调用风格,可通过DB::raw()来包裹计算表达式和字段:
use Illuminate\Support\Facades\DB; $names = Price::select('Name') ->where(DB::raw('price + amount'), '=', DB::raw('total')) ->pluck('Name');
这种写法会让Eloquent正确解析原生SQL逻辑,最终生成的SQL语句和你写的原生查询完全相同。
不管用哪种方式,都能精准筛选出name1和name3这两条记录的Name字段值。
内容的提问来源于stack exchange,提问作者Humam Tlay
相关产品推荐
相关产品推荐

