【问题标题】:Laravel 5.4 casts not workingLaravel 5.4 强制转换不起作用
【发布时间】:2018-08-02 15:32:58
【问题描述】:

我的模特

class Subscriber extends Model
{
    protected $casts = [
        'filters' => 'object'
    ];
}

在修补:

$s = App\Subscriber::first();
$s->filters
// prints serialized json:
// ""{\"maxHyra\":\"8000\",\"minAntalRum\":\"2\",\"Ungdom\":\"true\",\"Student\":\"true\",\"Korttid\":\"true\",\"Bostadssnabben\":\"true\",\"_token\":\"0Y2f3eAl27ikrujvw7VBWNOaNXxchygaFUDSo4s4\"}""

json_decode($s->filters)
// prints a neat php object.

所以显然我在属性中的数据很好,并且 json_decode 有效。但是演员阵容不行。我也尝试过没有成功的访问器。

【问题讨论】:

  • 您发布的那段代码看起来不错。或者你隐藏/省略了一些相关代码,或者这是一个 Laravel 错误。如果是第二种选择,请在 Laravel github (github.com/laravel/framework) 上创建问题
  • 谢谢,我试图隔离它,目前这是我的控制器代码。如果我没有其他想法,很快就会做。我假设我现在在项目的其他地方有一些错误:/
  • 尝试用最少的代码在一个空白的 Laravel 项目中复制问题,这样你就可以确认是不是你的错误。
  • 对象转换是否适用于 JSON?我在任何地方都没有看到记录,我在文档中看到或曾经尝试过的唯一内容是数组转换。

标签: laravel laravel-5.4


【解决方案1】:

$casts 双向工作,插入和检索。无需自己先使用json_encode 将数组转换为字符串。当它在 $casts 数组中时,Laravel 会这样做。

例如:

模型样本:

protected $casts = ['ext' => 'object'];

SampleController:

App\Sample::create([
'ext'=>['hello'=>'world']
])

【讨论】:

    【解决方案2】:

    Cast 可以双向工作,即插入和检索!我在插入新模型时保留了 json_encode。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 2017-12-04
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2018-01-03
      • 2017-10-17
      相关资源
      最近更新 更多