我正在使用php 7和MySQL 5.7。 attributes字段在我的表中定义为json列。
我在模型文件中定义了强制转换。
protected $casts = ['attributes' => 'array'];
添加数据时没有任何问题。
Transaction::create([
'name' => $this->name,
'subject_id' => $this->id,
'subject_type' => get_class($this),
'attributes' => ['status' => 0, 'type' => 'owner'],
'user_id' => $owner->id
]);
但我无法更新json数据。我试过这些方法:
$transaction = $this->transaction->where('content_key', $this->request->key)->first(); $transaction->update(['attributes->status' => 1]);
或
$transaction->attributes['status'] = 1; $transaction->save();
没有工作。
这些方法有效:
$transaction->update(['attributes'=> ['status' => 1, 'type' => 'owner'] ]);
(我需要更新此方法中的所有数据)
或
Db::table('transactions')->where('content_key', $this->request->key)->update(['attributes->status' => '1'])
我如何用Eloquent做到这一点?
答案 0 :(得分:1)
所以遇到了和你一样的问题,我花了一天的时间来弄清楚幕后发生了什么。试试这个尺寸:
$transaction->setAttribute ('attributes->status, 1);
如果你问我,Laravel的文档严重缺乏关于这个主题的详细信息! (但后来我认为这只是Laravel的标准功能)。