获取Eloquent中给定列的值

3

我试图使用Eloquent获取单个列的:

MyModel::where('field', 'foo')->get(['id']); // returns [{"id":1}]

MyModel::where('field', 'foo')->select('id')->first() // returns {"id":1}

然而,我得到的不是值为1。如何获得那个1
注意:表中可能不存在fieldfoo的记录!

编辑

我理想情况下正在寻找一个单一语句,它可以返回值(例如1)或失败并返回''null或其他。为了给你更多的上下文信息,这实际上是在Validator :: make中的一个规则中使用的:

'input' => 'exists:table,some_field,id,' . my_query_above...

编辑2

根据Adiasz的回答,我发现MyModel::where('field', 'foo')->value('id')正好满足我的需求:返回一个整数值或空字符串(失败时)。

4个回答

7

Laravel是一个直观的框架...如果你想要值,只需调用value()方法。

MyModel::find(PK)->value('id');

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

first()返回null时,它会失败:Call to a member function value() on null ;( - Alex
更改为 firstOrFail() - 这可以防止不存在的模型出现错误。 - Adiasz
那么就像Vikash的回答中所说,编写一个IF语句...多思考一下! - Adiasz
请查看我的编辑,我添加了一些重要的上下文来解决问题。 - Alex
很抱歉,我刚刚发现 MyModel::where('field', 'foo')->value('id') 给了我所需的结果(int或者是''如果失败了)... 谢谢! - Alex
显示剩余4条评论

6

您正在使用Eloquent查询构建器,因此默认情况下,它将返回一个仅包含所需值的Eloquent模型。

您要查找的方法是pluck(),它存在于普通查询构建器中(Eloquent查询构建器继承自此),因此您的代码应如下所示:

MyModel::where('field', 'foo')->pluck('id'); // returns [1]

value()方法是Eloquent模型的一个方法,其他答案中使用了它。使用这个方法意味着框架会查询数据库,将模型转换为对象,然后仅返回该值。您可以通过使用pluck()来节省一些击键和CPU周期,并在一个查询中简单地处理它。


如果数组可能为空,那么如何从中检索出1 - Alex
如果($result){ return $result[0]; } - ollieread

0
在PHP7中:
MyModel::find($id)->{$value}

0
在 Laravel 8 中,借助 Eloquent,您可以使用以下内容:
MyModel::find(PK)->getAttribute('name')
  • MyModel 是模型名称
  • PK 是主键(您要查找的行)
  • name 是要返回值的列

注意:getAttribute() 允许您指定单个列,而 getAttributes() 允许您指定一个列数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接