我正在尝试使用Eloquent获取单个列的值:
MyModel::where('field', 'foo')->get(['id']); // returns [{"id":1}]
MyModel::where('field', 'foo')->select('id')->first() // returns {"id":1}
但是,我得到的是价值1
。如何获得1
?
注意:表格中可能不存在field
foo
1
的记录!
我理想地寻找一个单一陈述,它会返回值(例如''
)或失败但null
或Validator::make
或其他。为了给你一些更多的上下文,这实际上在'input' => 'exists:table,some_field,id,' . my_query_above...
中的一个规则中使用:
MyModel::where('field', 'foo')->value('id')
使用Adiasz的答案,我发现SELECT User_ID, SUM(Transaction_Amount)
FROM yourTable
WHERE DATE(Transaction_Date) = '2016-08-30'
OR (DATE(Transaction_Date) = '2016-08-31' AND Transaction_Amount > 0)
GROUP BY User_ID
完全符合我的需要:返回一个整数值或一个空字符串(失败时)。
答案 0 :(得分:3)
Laravel是直观的框架......如果你想要值,只需调用value()方法。
MyModel::find(PK)->value('id');
MyModel::where('field', 'foo')->first()->value('id');
答案 1 :(得分:2)
您正在使用Eloquent查询构建器,因此默认情况下,它会返回一个只有您希望的值的Eloquent模型。
您正在寻找的方法是pluck()
,它存在于普通查询构建器中(Eloquent扩展),因此您的代码应如下所示:
MyModel::where('field', 'foo')->pluck('id'); // returns [1]
其他答案中使用的value()
方法是一种Eloquent模型方法。使用它意味着框架查询数据库,水合模型然后只返回该值。使用pluck()
可以节省几次击键和几个CPU周期,只需在一个查询中处理它。