如何为雄辩的模型创建强制转换定义,从而允许自动处理嵌套数组的编码/解码?
据我所知,'array'强制转换只对数组的第一层进行编码和解码。如果有嵌套数组,则嵌套级别将仅作为字符串而不是数组返回。
Laravel允许您转换类型的数据以便与雄辩的模型一起使用,这样就可以将值传递到DB和DB中,而不必连续使用json_decode和json_encode等。
这是他们的文档讨论类型转换PHP数组<-> MySQL JSON的地方:
https://laravel.com/docs/master/eloquent-mutators#array-and-json-casting
问题是,如果您有一个嵌套的PHP数组,并且希望将它转换为/来自MySQL,Laravel的数组转换只能在第一级工作。
具有多个嵌套级别的数组或对象将其嵌套级别存储和检索为字符串而不是数组。
例如:
如果这是您的模型中的一个属性:
protected $casts = [
'nestedArray' => 'array'
]然后尝试将这个嵌套数组存储到DB中:
$nestedArray = [
'sample1key' => 'sample1data',
'sample2key' => ['nested2key' => 'nested2data']
]如果您使用上面的MySQL数组并将其作为JSON存储在JSON DB中,然后检索它,而不是原来的嵌套数组,您将得到以下结果:
$nestedArray = [
'sample1key' => 'sample1data',
'sample2key' => "['nested2key' => 'nested2data']"
]注意新的双引号,这意味着它是一个字符串,然后您必须在sample2key上使用sample2key以编程方式访问其元素,这并不理想。
这个例子看起来很简单,但在规模上却不方便。我试图找到一种方法来创建一个对数组的所有嵌套级别进行编码/解码的强制转换,而不仅仅是第一级。
发布于 2019-10-21 07:44:55
原来我的问题是因为我用
$tableResults = DB::table('table')->where()....而不是
$tableResults = new Table();
$tableResults = $tableResults->where()....由于明显的原因,雄辩的类型只有当你实际使用雄辩模型时才能工作。当您直接与DB交互时,它没有任何相关性。
https://stackoverflow.com/questions/58481445
复制相似问题