首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >对对象数组使用$casts

对对象数组使用$casts
EN

Stack Overflow用户
提问于 2021-04-08 09:44:38
回答 2查看 1K关注 0票数 3

我有一节课:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Account extends Model
{
    protected $casts = [
        'industries' => 'json',
    ];

    public function getIndustriesAttribute($value = null)
    {
        return collect(json_decode($value, true))->map(function ($industry) {
            return new Industry($industry);
        });
    }
}

industries是数据库中的json字段。

上面的代码实现了我的目标--如果访问给定字段,则来自给定字段的值将为json_decoded,然后转换为Industry数组。当保存此模型时,行业将保存为每个$casts的json。

我想要做的是摆脱getIndustriesAttribute,让Laravel将我的json转换为对象的数组--理想情况下,我的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Account extends Model
{
    protected $casts = [
        'industries' => Industry::class.'[]',
    ];
}

当然,这不起作用,但它给出了我想要发生的事情--一个对象数组应该是json_encode / json_decoded (Industry是一个普通的对象,所以它不需要序列化)。

作为一种解决办法,我写了这篇文章:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

trait ArrayableCast
{
    public static function castUsing(array $arguments)
    {
        if (in_array('[]', $arguments)) {
            return new class implements CastsAttributes {
                public function get($model, $key, $value, $attributes)
                {
                    return collect(json_decode($value, true))->map(function ($item) {
                        return new (static::class)($item);
                    })->all();
                }
        
                public function set($model, $key, $value, $attributes)
                {
                    return json_encode(collect($value)->map(function ($item) {
                        return $item->toArray();
                    })->all());
                }
            };
        }

        return new class implements CastsAttributes {
            public function get($model, $key, $value, $attributes)
            {
                return new (static::class)(json_decode($value, true));
            }
    
            public function set($model, $key, $value, $attributes)
            {
                return json_encode($value->toArray());
            }
        };
    }
}

可以用的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected $casts = [
   'industries' => Industry::class.':[]',
];

但是如果有一个本地的Laravel来处理这种情况,我会很感激的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-11 01:51:22

您可以使用我的库,它有一个如何使用Laravel自定义强制转换- https://github.com/morrislaptop/laravel-popo-caster#2-configure-your-eloquent-attribute-to-cast-to-it的数组转换的示例。

票数 1
EN

Stack Overflow用户

发布于 2021-04-08 11:00:07

如果您坚持以这种方式转换属性,那么您应该查看自定义铸型

否则,我建议您查看@Bodhi关于使用一对多关系的评论。

以下是对您来说自定义强制转换的样子:

app/Casts/Industries.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

namespace App\Casts;

use Illuminate\Contracts\Database\Eloquent\CastsAttributes;

class Industries implements CastsAttributes
{
    /**
     * Cast the given value.
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  mixed  $value
     * @param  array  $attributes
     * @return array
     */
    public function get($model, $key, $value, $attributes)
    {
        return collect(json_decode($value, true))->map(function ($industry) {
            return new Industry($industry);
        });
    }

    /**
     * Prepare the given value for storage.
     *
     * @param  \Illuminate\Database\Eloquent\Model  $model
     * @param  string  $key
     * @param  array  $value
     * @param  array  $attributes
     * @return string
     */
    public function set($model, $key, $value, $attributes)
    {
        return json_encode($value);
    }
}

app/Models/Account.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

use App\Casts\Industries;

class Account extends Model
{
    protected $casts = [
        'industries' => Industries::class,
    ];
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67009253

复制
相关文章
Java中对象数组的使用
对象数组其实和Java的数组类似的,所以要很清楚Java的数组是如何使用的,如果有不懂的可以点下面这个链接Java数组的使用
Gorit
2021/12/09
7.1K0
Java中对象数组的使用
js 对象转数组对象_js 对象数组
var obj = {name:”张三”,name:”李四”,name:”王五”};
全栈程序员站长
2022/09/30
31.8K0
java对象数组 创建对象数组,初始化对象数组
对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组。 当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。 对象数组的定义和使用: 对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。 对象数组的声明形式是: 类名 对象数组名 [ ]; 为对象数组分配内存空间: 对象数组名=new 类名[数组长度];//注意 :此处不是构造方法了 可以将对象数组的声明和创建用一条语句来完成。例如:定义一个学生类对象数组,可以用下面的语句定义:Student stu[ ]=new Student[30]; stu [ ]是对象数组名,它所表示的数组一共有30个元素,每一个元素都是Student类的对象名,还没有实例化,所以还必须为每一个元素实例化。比如如下的过程: for(int i=0;i<stu.length;i++) stu[i]=new Student(); 实例化以后就可以使用每一个元素对象。 设计一个雇员类,并创建雇员类的对象数组,输出每个雇员的信息
用户7886150
2021/02/01
4K0
VUE学习笔记——es6对象合并 数组转对象
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/03
1.1K0
laravel 属性类型转换$casts
$casts 属性应是一个数组,且数组的键是那些需要被转换的属性名称,值则是你希望转换的数据类型。
友儿
2022/09/11
5260
数组转对象,对象转数组对不对_对象数组初始化
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
2.3K0
java对象数组 创建对象数组,初始化对象数组「建议收藏」
对象数组的概念: 如果一个数组中的元素是对象类型,则称该数组为对象数组。 当需要一个类的多个对象时,应该用该类的对象数组来表示,通过改变下标值就可以访问到不同的对象。 对象数组的定义和使用: 对象数组的定义与一般数组的定义类似,但是需要为每一个元素实例化。 对象数组的声明形式是: 类名 对象数组名 [ ]; 为对象数组分配内存空间: 对象数组名=new 类名[数组长度];//注意 :此处不是构造方法了 可以将对象数组的声明和创建用一条语句来完成。例如:定义一个学生类对象数组,可以用下面的语句定义:Student stu[ ]=new Student[30]; stu [ ]是对象数组名,它所表示的数组一共有30个元素,每一个元素都是Student类的对象名,还没有实例化,所以还必须为每一个元素实例化。比如如下的过程: for(int i=0;i<stu.length;i++) stu[i]=new Student(); 实例化以后就可以使用每一个元素对象。 设计一个雇员类,并创建雇员类的对象数组,输出每个雇员的信息
全栈程序员站长
2022/08/31
2.3K0
数组/对象
数组 创建数组 var arr = new Array() var arr = [] 索引数组 arr[0] = '张三' arr[1] = 18 arr[2] = "男" console.log(arr) //["张三", 18, "男"] 关联数组 arr["name"] = '张三' arr["age"] = 18 arr["sex"] = "男" console.log(arr) //[name: "张三", age: 18, sex: "男"] 对象 创建对象 person = new
hss
2022/02/25
1.2K0
element-ui 对复杂对象型数组进行表单验证
1、需求场景,需要动态修改物流信息对象,并需要验证的复杂数据对象,所以我们只分析怎样验证复杂数据结构的数据,也就是上面的‘dialogFrom.options’中的对象数组。如何遍历该数组,来给每个元素添加验证呢?
用户2323866
2021/06/23
3.8K0
java json数组转json对象_json对象数组
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
10K0
java json数组转json对象_json对象数组
JavaScript——数组对象
注意:当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测 iframes.
岳泽以
2022/10/26
1.5K0
js数组字符串转数组对象_js数组对象排序
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/01
15.4K0
委托示例(利用委托对不同类型的对象数组排序)
using System; using System.Collections.Generic; using System.Text; namespace delegateTest {     /// <summary>     /// 演示利用委托给不同类型的对象排序     /// </summary>     class Program     {         delegate bool CompareOp(object lhs,object rhs);//声明委托(注意方法
菩提树下的杨过
2018/01/22
1.7K0
JavaScript数组对象
万能操作 数组.splice(开始位置,数量,操作),操作后原数组的内容改变第一个参数是指定从几号位置开始删除或添加  第二个参数是指定删除几个元素
十月梦想
2018/08/29
1.7K0
JavaScript|数组对象
讲到数组会有人问,什么是数组?数组就是有序数据的集合,在JavaScript中的数组元素允许属于不同的数据类型,用数组名和下标就可以唯一地确定数组中的元素。接下来将会详细的讲解一下JavaScript数组对象。
算法与编程之美
2020/09/08
1.7K0
Java对象数组
所谓的对象数组,就是指包含了一组相关的对象,但是在对象数组的使用中一定要清楚一点:数组一定要先开辟空间,但是因为其是引用数据类型,所以数组里面的每一个对象都是null值,则在使用的时候数组中的每一个对象必须分别进行实例化操作。
全栈程序员站长
2022/08/22
6640
Java对象数组
JS 对象转数组_jquery把对象转成数组
es6方法 Object.values返回一个对象的值的一个数组, Object.keys()返回对象的键数组
全栈程序员站长
2022/09/30
4.7K0
使用asort函数对PHP数组进行升序排序
PHP是一门功能强大的语言,数组是PHP中十分常用的数据结构之一。在实际开发中,经常需要对数组进行排序。PHP提供了多个函数用于对数组进行排序,其中asort函数可以实现对数组进行升序排序。
很酷的站长
2023/08/25
5170
使用asort函数对PHP数组进行升序排序
使用 Python 对波形中的数组进行排序
假设我们采用了一个未排序的输入数组。我们现在将对波形中的输入数组进行排序。数组 'arr[0..n-1]' 以波形排序,如果 arr[0] >= arr[1] <= arr[2] >= arr[3] <= arr[4] >= .....
很酷的站长
2023/02/22
6.9K0
使用 Python 对波形中的数组进行排序
JS对象-遍历数组对象
请把下面数据中的对象打印出来: students = [ {uid: 1, name: ‘小明’, age: 18, gender: ‘男’, hometown: ‘河北省’ }, {uid: 2, name: ‘小红’, age: 19, gender: ‘女’, hometown: ‘河南省’ }, {uid: 3, name: ‘小刚’, age: 17, gender: ‘男’, hometown: ‘山西省’ }, {uid: 4, name: ‘小丽’, age: 18, gender: ‘女’, hometown: ‘山东省’ } ]
且陶陶
2023/04/12
9.4K0
JS对象-遍历数组对象

相似问题

$casts,数组数据

28

基于casts的GCC / LLVM编译优化?

20

auto和static_casts -良好实践

25

对可观察对象数组使用combineLatest

221

使用另一对象数组过滤对象数组

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文