首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >套式阵列的拉威尔型铸造

问套式阵列的拉威尔型铸造
EN

Stack Overflow用户
提问于 2019-10-21 07:15:29
回答 1查看 1.3K关注 0票数 1

如何为雄辩的模型创建强制转换定义,从而允许自动处理嵌套数组的编码/解码?

据我所知,'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的数组转换只能在第一级工作。

具有多个嵌套级别的数组或对象将其嵌套级别存储和检索为字符串而不是数组。

例如:

如果这是您的模型中的一个属性:

代码语言:javascript
复制
protected $casts = [
    'nestedArray' => 'array'
]

然后尝试将这个嵌套数组存储到DB中:

代码语言:javascript
复制
$nestedArray = [
    'sample1key' => 'sample1data',
    'sample2key' => ['nested2key' => 'nested2data']
]

如果您使用上面的MySQL数组并将其作为JSON存储在JSON DB中,然后检索它,而不是原来的嵌套数组,您将得到以下结果:

代码语言:javascript
复制
$nestedArray = [
    'sample1key' => 'sample1data',
    'sample2key' => "['nested2key' => 'nested2data']"
]

注意新的双引号,这意味着它是一个字符串,然后您必须在sample2key上使用sample2key以编程方式访问其元素,这并不理想。

这个例子看起来很简单,但在规模上却不方便。我试图找到一种方法来创建一个对数组的所有嵌套级别进行编码/解码的强制转换,而不仅仅是第一级。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-21 07:44:55

原来我的问题是因为我用

代码语言:javascript
复制
$tableResults = DB::table('table')->where()....

而不是

代码语言:javascript
复制
$tableResults = new Table();
$tableResults = $tableResults->where()....

由于明显的原因,雄辩的类型只有当你实际使用雄辩模型时才能工作。当您直接与DB交互时,它没有任何相关性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58481445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档