我有以下工作的ORM
$timezones = DB::table('timezones')->pluck(DB::Raw('concat_ws(" ",label,name) as name'), 'id');
我将其转换为
$timezones = Timezone::pluck(DB::Raw('concat_ws(" ",label,name) as name'), 'id');
并得到如下错误
ErrorException in Str.php line 432:
Illegal offset type in isset or empty
模型非常简单,如下面
class Timezone extends Model
{
protected $table = 'timezones';
protected $connection = 'mysql';
}
答案 0 :(得分:3)
我认为,你在pluck中的原始查询是指一个对象。因此,何时尝试获取具有索引的元素作为对象错误已显示。
您应该将查询更改为以下内容:
$timezones = Timezone::select(DB::Raw('concat_ws(" ",label,name) as name'), 'id')->pluck('name','id');
这会奏效。希望它会有所帮助
答案 1 :(得分:1)
在不使用DB :: raw和MySQL的concat_ws的情况下实现相同结果的另一种方法是使用Laravel的访问器。例如:
在Timezone模型上,创建一个这样的访问器方法:
public function getLabelAttribute($value)
{
return $value . ' ' . $this->name;
}
然后你可以通过这样做来检索它:
$timezone = Timezone::first();
$timezone->label;