亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Lavarel ORM更新json字符串的問題

Lavarel ORM更新json字符串的問題

PHP
白豬掌柜的 2019-03-08 05:37:11
數據庫里有個字段是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處理嗎?
查看完整描述

1 回答

?
不負相思意

TA貢獻1777條經驗 獲得超10個贊

自己找到方法了,解決了,代碼如下。

$conditions = array(
    'id' => $id
);

$extra = array(
...
);
  
$service = RecordModel::firstOrNew($conditions);
$service->extra = $extra;    
$service->save();

另外這個方法會自動把沒有變化的字段去掉,只更新有變化的字段,如果待更新的字段全部未變化則不進行Mysql更新操作。

查看完整回答
反對 回復 2019-03-18
  • 1 回答
  • 0 關注
  • 410 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號