【问题标题】:Laravel Model Get Method Decoding JSONLaravel 模型获取方法解码 JSON
【发布时间】:2021-10-06 22:33:57
【问题描述】:

您好,下面是我存储在数据库中的内容,但是当我在模型中使用 get 方法时,我必须在格式化数据时使用 json_decode 两次,为什么会发生这种情况,我可以让它以某种方式使用一次。

json 完全在 db 中:

"[{\"id\":\"1\",\"country\":\"New Zealand\",\"shipping_rate\":\"1\"},{\"id\":\"2\",\"country\":\"Australia\",\"shipping_rate\":\"2\"}]"

模型获取方法:

public function getshippingAttribute()
{
    return $this->attributes['shipping'] ? json_decode(json_decode($this->attributes['shipping'])) : [];
}

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    您的问题还不够清楚,但Laravel 提供了一个用于属性转换的内置机制(自v-5.1 起)。在这种情况下,在您的模型中,只需声明一个 $casts 属性,例如:

    protected $casts = [
        'shipping' => 'array',
        // more ...
    ];
    

    由于上面给出的$casts 属性,每当您编写(创建/更新)模型时,您无需显式使用json_encode 将数组转换为json 字符串、Laravel会为你做这件事,当你检索模型(单个/集合)时,shipping 属性将自动转换回array,所以你不需要使用json_decode 来处理属性。

    关于响应,如果您不手动将其转换为 json(返回 model/collection 时),laravel 也会处理该响应。这可能会解决您的问题。

    【讨论】:

      【解决方案2】:
      public function getshippingAttribute()
      {
          return $this->attributes['shipping'] ? json_decode($this->attributes['shipping']) : [];
      }
      

      【讨论】:

      • 欢迎来到 Stack Overflow,感谢您提供答案。您能否编辑您的答案以包括对您的代码的解释?这将有助于未来的读者更好地了解正在发生的事情,尤其是那些刚接触该语言并难以理解概念的社区成员。
      【解决方案3】:

      尝试返回 json 响应

      public function getshippingAttribute()
      {
          return response()->json($this->attributes['shipping'])
      }
      

      【讨论】:

      • 如果我这样做,我会得到一个只包含 ajax 调用的 headers 属性的空对象,所以这个选项将不起作用,因为我没有在那里进行数据库调用我正在格式化输出字段
      • 在 laravel 的文档中他们说:json 方法会自动将 Content-Type 标头设置为 application/json,并使用 json_encode PHP 函数将给定数组转换为 JSON:
      • 可能变量为空
      猜你喜欢
      • 2017-08-06
      • 1970-01-01
      • 2014-11-20
      • 2020-05-22
      • 2019-06-08
      • 1970-01-01
      • 2020-01-11
      • 2020-09-11
      • 1970-01-01
      相关资源
      最近更新 更多