mysql 更新Laravel中视频模型的'video_metadata'列的问题

inkz8wg9  于 2023-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(115)

我目前在Laravel中尝试更新视频模型的'video_metadata'列时遇到了一个问题。我尝试了两种不同的方法,但似乎只有第一种方法有效。
以下是我尝试过的两种方法:
1.工作方法:

Video::where('id', $this->video->getKey())->update([
   'video_metadata->author_id' => 2
]);

2.不起作用的方法:

$this->video->update([
   'video_metadata->author_id' => 2
]);

我很困惑为什么第二种方法不起作用。这两种方法在我看来都很相似,但只有第一种方法成功地更新了'video_metadata'列。有人能解释一下为什么第二种方法不起作用并提出解决方案吗?谢谢你!

c2e8gylq

c2e8gylq1#

第一种方法使用Query Builder更新数据库。这不会调用像eventsmutators这样的Eloquent模型示例。它根据指定的条件直接修改数据库。(WHERE id = 'xyz'
但是第二种方法使用Eloquent模型示例来更新数据库,这意味着它触发events并使用mutators
但是问题是***第二种方法不能直接更新JSON列***
您可以尝试的解决方案有

$metadata = $this->video->video_metadata;
$metadata['author_id'] = 2;
$this->video->video_metadata = $metadata;
$this->video->save();

$this->video->video_metadata = array_merge((array) $this->video->video_metadata, ['author_id' => 2]);
$this->video->save();

相关问题