数据库里有个字段是text类型,存放的是json数据。
表Model操作类
class RecordModel extends Illuminate\Database\Eloquent\Model {
/**
* table
*
* @var string
*/
protected $table = 'records';
/**
* primaryKey
*
* @var string
*/
protected $primaryKey = 'id';
/**
* guarded
*
* @var mixed
*/
protected $guarded = array();
/**
* getExtraAttribute
*
* @param mixed $value
* @return void
*/
public function getExtraAttribute($value) {
return json_decode($value);
}
/**
* setExtraAttribute
*
* @param mixed $value
* @return void
*/
public function setExtraAttribute($value) {
$this->attributes['extra'] = json_encode($value);
}
}
业务逻辑代码
// $id 是用户输入进来的参数
$service = new RecordModel();
if ($service->where('id', $id)->exists()) {
// 存在记录,更新
$data = array(
'extra' => json_encode($extra),
);
$service->where('id', $id)->update($data);
} else {
// 不存在记录,新增
$service->id = $id;
$service->extra = $extra;
$service->save();
}
我看了Lavarel ORM里Model类的代码,新增逻辑会触发Model里的__set方法,进而触发setAttribute方法自动将extra字段的值进行json_encode处理。
但是存在记录的情况下,$service->where('id', $id)
返回的是一个Illuminate\Database\Eloquent\Builder
实例,它的update方法并不会自动进行json_encode处理。
这里有办法可以让update操作的时候也自动进行json_encode处理吗?
不负相思意