在Eloquent中获取给定列的值

时间:2016-09-25 21:10:57

标签: laravel eloquent

我正在尝试使用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的记录!

修改

我理想地寻找一个单一陈述,它会返回值(例如'')或失败但nullValidator::make或其他。为了给你一些更多的上下文,这实际上在'input' => 'exists:table,some_field,id,' . my_query_above... 中的一个规则中使用:

MyModel::where('field', 'foo')->value('id')

编辑2

使用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 完全符合我的需要:返回一个整数值或一个空字符串(失败时)。

2 个答案:

答案 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周期,只需在一个查询中处理它。