Laravel eloquent pluck 中的奇怪行为

sum*_*mit 1 php orm laravel eloquent

我有以下正在工作的 ORM

$timezones = DB::table('timezones')->pluck(DB::Raw('concat_ws(" ",label,name) as name'), 'id');
Run Code Online (Sandbox Code Playgroud)

我把它转换成

$timezones = Timezone::pluck(DB::Raw('concat_ws(" ",label,name) as name'), 'id');
Run Code Online (Sandbox Code Playgroud)

并得到如下错误

ErrorException in Str.php line 432:
Illegal offset type in isset or empty
Run Code Online (Sandbox Code Playgroud)

模型很简单,如下所示

class Timezone extends Model
{

     protected $table = 'timezones';
     protected $connection = 'mysql';

}
Run Code Online (Sandbox Code Playgroud)

Sag*_*tam 5

我认为,您在 pluck 中的原始查询是指一个对象。因此,何时尝试获取索引为对象的元素已显示错误。

您应该将查询更改为如下所示:

$timezones = Timezone::select(DB::Raw('concat_ws(" ",label,name) as name'), 'id')->pluck('name','id');
Run Code Online (Sandbox Code Playgroud)

这将起作用。希望它会有所帮助