无法使用 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 列的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 雄辩的复杂搜索查询问题

将对象返回为 json 时访问雄辩的关系

雄辩的条件更新

Laravel 雄辩到 json

Laravel 查询构建器与雄辩的关系

Laravel 4.2 雄辩的动态查询