Eloquent 在 laravel 更新而不删除旧内容

Eloquent update in laravel without deleting the old content

我的 class 中有状态属性。创建新实例时,使用 'create',我将一个数组传递给状态。

class email extends Eloquent{

    protected $table = 'emails';
    protected $fillable = array(
        'status',
    );
}

这是结果

"status": {
  "sent": false,
  "deleted": false,
  "silent": false
}

我正在尝试这样做以仅更新其中一个状态。

$dest= email::where('uid', "5040")->update(['status.sent'=>true]);

但这会产生我不喜欢的结果。

"status": {
  "sent": true
}

之前写的内容都被删除了,这个结果怎么来的

"status": {
  "sent": true,
  "deleted": false,
  "silent": false
}

我有一个查询银行并获取状态数组、存储它、更改它和更新它的想法,但这会让我查询银行两次。一个获取数组,另一个更新。有一种方法,比如 'spread'(...)。或者更正确和简单的东西。

在模型中添加 $casts

protected $casts = [
    'status'=>'array'
];

然后

$dest = email::where('uid', "5040")->update(['status->sent' => true]);

参考:https://laravel.com/docs/6.x/queries#updating-json-columns