【发布时间】:2023-03-05 06:17:01
【问题描述】:
我有下表:
| id | number_one | number_two | number |
| 1 | 10 | 20 | 10020 |
其中number 是number_one 和number_two 的虚拟创建组合。现在,当访问一行时,Laravel 模型也会按预期返回 number。
Number::find(1); // returns [ id => 1, number_one => 10, number_two => 20, number => 10020]
但是在使用时
Number::create(['number_one' => 10, 'number_two' => 21]);
它只返回
[number_one => 10, number_two => 21, id => 2]
所以我的问题是如何让它在创建时返回以下内容:
[ number_one => 10, number_two => 21, number => 10021, id => 2]
是的,我可以使用附加查询或getNumberAttribute 方法,但希望避免这种情况
【问题讨论】:
-
好吧,
insert声明不是select,所以您可能想要refresh模型,所以它会执行select并获取所有字段 -
在创建模型事件时可以修改数字列:laravel.com/docs/8.x/eloquent#events-using-closures
-
@lagbox 这似乎是目前最好的解决方案,因为
fresh可以链接到create -
是的
refresh返回具有更新属性和关系的当前实例,fresh返回一个新实例,因此无论哪种方式,您都可以从这些方法返回模型:)
标签: laravel eloquent laravel-7