无法使用 Laravel 雄辩模型更新 json 列
Posted
技术标签:
【中文标题】无法使用 Laravel 雄辩模型更新 json 列【英文标题】:can't update json column using Laravel eloquent model 【发布时间】:2021-06-01 22:41:09 【问题描述】:我正在尝试测试 Eloquent 模型的更新...
/** @test */
public function updates_to_json_fields_are_logged()
$data = json_encode(["json_key" => "old_value"]);
$individual = Individual::factory()->create([
"information" => $data
]);
json_decode($individual->information)->json_key = "new_value";
$individual->save();
echo(var_dump($individual));
$this->assertTrue(false);
information
是一个 json 列。
当我保存$individual
后登录时,"information->json_key"
的值仍然是"old_value"
。谁能告诉我为什么?
【问题讨论】:
您的代码完全按照您的编写。在json_decode
返回的新对象上分配"new_value"
。存储在$individual
中的对象没有发生任何变化
@N69S。如何更改原点对象?
我在下面添加了一个答案,它对你有用吗?
【参考方案1】:
改变 $individual 对象而不用花哨的分配
/** @test */
public function updates_to_json_fields_are_logged()
$data = json_encode(["json_key" => "old_value"]);
$individual = Individual::factory()->create([
"information" => $data
]);
$decodedInformation = json_decode($individual->information);
$decodedInformation->json_key = "new_value";
$individual->information = json_encode($decodedInformation);
$individual->save();
echo(var_dump($individual));
$this->assertTrue(false);
【讨论】:
【参考方案2】:你没有改变原来的$individual
对象,而是json_decode()
的结果。
【讨论】:
@mm。那么如何更改原始对象呢?以上是关于无法使用 Laravel 雄辩模型更新 json 列的主要内容,如果未能解决你的问题,请参考以下文章