在 Laravel model 中,设置了某个属性做 array casting.

protected $casts = [
'rounds' => 'array',
];

但是在 controller 中执行

array_push($record->rounds, date("Y-m-d H:i:s"));

时,报错

production.ERROR: Indirect modification of overloaded property

可见,casting 并不支持一些针对特定类型的操作,例如无法作为指定类型的函数的参数。

按照官方文档的做法,应该是先赋值给一个中间变量,进行操作,然后再赋值回去。

$user = App\User::find(1);
$options = $user->options;
$options['key'] = 'value';
$user->options = $options;
$user->save();

所以正确的做法应该是

$tmp = $record->rounds;
array_push($tmp, date("Y-m-d H:i:s"));
$record->rounds = $tmp;
$record->save();

collection casting

发现还有 collection casting 的支持,于是尝试了一下。

// casting 类型
- 'rounds' => 'array'
+ 'rounds' => 'collection' // collection 的 push 操作
// 需要注意,push 之后,需要重新赋值回去。
- array_push($record->rounds, date("Y-m-d H:i:s"));
+ $record->rounds = $record->rounds->push(date("Y-m-d H:i:s")); // 初始化
- $game_record->rounds = [];
+ $game_record->rounds = collect([]);

casting 支持的类型

integer, real, float, double, string, boolean, object, array, collection, date, datetime, and timestamp.

Laravel attribute casting 导致的 Indirect modification of overloaded property的更多相关文章

  1. thinkphp5中Indirect modification of overloaded element of XXX has no effect的解决办法

    最近在使用Thinkphp5做foreach循环嵌套的时候报错:Indirect modification of overloaded element of XXX has no effect,网上搜 ...

  2. tp5框架用foreach循环时候报Indirect modification of overloaded element of think\paginator\driver\Bootst错误

    thinkphp5使用paginator分页查询数据后,需要foreach便利处理某一字段的数据,会出现类似题目的错误.主要是因为tp5使用分页类读取的数据不是纯数组的格式!所以在循环的时候需要用数据 ...

  3. Attribute "not-null" must be declared for element type "property"解决办法

    Attribute "not-null" must be declared for element type "property"解决办法 在hiberante ...

  4. Laravel 使用Voyager导致多个数据库连接总是返回默认连接?

    问题与分析 最近的项目碰到一个奇怪的问题,在Laravel(5.3)中想建立多个数据库连接连到MySQL的不同数据库(另一个连接名为conn2),执行如下语句得到却发现得到的仍然是默认连接: $con ...

  5. laravel EncryptCookies中间件导致无法获取自定义cookie

    解决办法: \app\Http\Middleware\EncryptCookies.php 添加过滤cookie key protected $except = [ 'token' ];

  6. html标签属性(attribute)和dom元素的属性(property)

    简介 attribute和property都有属性之意,但对于attribute和property的区分其实并不难.从对象来说,attribute是html文档上标签属性, 而property则是对应 ...

  7. 从CakePHP 1.3升级到2.5

    从CakePHP 1.3升级到2.5 摘要:最近把一个CakePHP 1.3的项目升级到了2.x,当然就用最新的版本2.5.3了,结果基本满意.本文记录了升级的过程,包括使用的工具,遇到的问题和相应的 ...

  8. 大约laravel错误的解决方案

    2015-3-13 夜晚 9:13 执行laravel发生错误Indirect modification of overloaded element of BbsArticle has no effe ...

  9. JQuery1.11版本对prop和attr接口的含义分离导致问题分析

    问题背景 实验中, 在jquery1.7版本, attr("value")  和 val() 接口获取 input 控件的值, 都是一致的, 都是当前控件值. 但是 jquery1 ...

随机推荐

  1. python post提交

    # coding:utf8 import requests def login(): url = 'http://back.xiyilang.cc/staff/login.json' headers= ...

  2. raise TemplateDoesNotExist

    raise TemplateDoesNotExist(template_name, chain=chain)django.template.exceptions.TemplateDoesNotExis ...

  3. python自动化运维之路~DAY5

    python自动化运维之路~DAY5 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.模块的分类 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数 ...

  4. Python基础【day01】:Hello World程序(二)

    本节内容 安装 Hello World程序 变量 一.Python安装 windows 1 2 3 4 5 6 7 1.下载安装包     https://www.python.org/downloa ...

  5. Python新手入门英文词汇笔记(转)

    一.交互式环境与print输出 1.print:打印/输出2.coding:编码3.syntax:语法4.error:错误5.invalid:无效6.identifier:名称/标识符7.charac ...

  6. Study 6 —— while循环

    语法while 条件: 执行代码... 1. #从0打印到100,每循环一次 +1 count = 0 while count <= 100 : print('Loop: ', count) c ...

  7. CentOS6.8下查看yum及rpm安装后的软件位置

    参考资料:http://blog.csdn.net/ngvjai/article/details/7997743   http://blog.sina.com.cn/s/blog_976e495701 ...

  8. git常用命令及含义

    Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等.顾名思义,版本控制系统主要就是控制.协调 ...

  9. Kettle基本概念学习

    一,理解开发环境与生产环境. 比如,在windows或mac下设计好流程之后,把该设计文件上传到linux集群的机器上执行.那么,在windows下进行的工作即为开发环境,任务具体在linxu机器上执 ...

  10. 百度编辑器 Ueditor 如何增加模板 ?

    模板文件在这里: dialogs/template/config.js 参见:http://t.mreald.com/191 .