在 Eloquent 中获取给定列的值

Ale*_*lex 3 laravel eloquent

我正在尝试使用 Eloquent获取单个列的

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

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

但是,我得到的只是 value 1。怎么能得到1呢?

注意:表中可能不存在带有fieldof的记录foo

编辑

我最好找一个单独的语句,要么返回值(例如1),或失败,一个''null或其他。为了给您更多的上下文,这实际上用于Validator::make以下规则之一:

'input' => 'exists:table,some_field,id,' . my_query_above...
Run Code Online (Sandbox Code Playgroud)

编辑 2

使用 Adiasz 的回答,我发现这MyModel::where('field', 'foo')->value('id')正是我需要的:返回一个整数值或一个空字符串(失败时)。

Adi*_*asz 7

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

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

MyModel::where('field', 'foo')->first()->value('id');
Run Code Online (Sandbox Code Playgroud)


oll*_*ead 5

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

您正在寻找的方法pluck()存在于普通查询构建器中(Eloquent 扩展了该构建器),因此您的代码应如下所示:

MyModel::where('field', 'foo')->pluck('id'); // returns [1]
Run Code Online (Sandbox Code Playgroud)

value()是在其他的答案被使用的方法是一个口才模型方法。使用这意味着框架查询数据库,对模型进行水合,然后仅返回该值。您可以通过使用pluck()并在一个查询中简单地处理它来节省几次击键和几个 CPU 周期。