Laravel如何在创建模型时返回虚拟生成的列

Laravel如何在创建模型时返回虚拟生成的列,laravel,eloquent,laravel-7,Laravel,Eloquent,Laravel 7,我有下表: | id | number_one | number_two | number | | 1 | 10 | 20 | 10020 | 其中,number是由number\u one和number\u two虚拟创建的组合。现在,当访问一行时,Laravel模型也会按预期返回编号 Number::find(1); // returns [ id => 1, number_one => 10, number_two => 20, nu

我有下表:

| id | number_one | number_two | number |
| 1  | 10         | 20         | 10020  |
其中,
number
是由
number\u one
number\u two
虚拟创建的组合。现在,当访问一行时,Laravel模型也会按预期返回
编号

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
方法,但希望避免这种情况

因为
create
会导致一个INSERT语句,所以从表中获取字段时不会发生SELECT。您会注意到,如果您有一个具有默认值的表,并且您没有传递这些字段,那么您的模型中也不会有这些字段

要获取这些字段,您需要进行选择。您可以对模型实例调用
refresh
,从数据库中刷新其属性和关系,也可以调用
fresh
从数据库中获取新实例(基本上是一个
find
)。[两种方法都将返回一个模型实例]

$model = Model::create([...])->refresh();
// or
$model = Model::create([...])->fresh();

嗯,
insert
语句不是
select
,因此您可能需要
refresh
模型,这样它将执行
select
并获取所有字段创建模型事件,您可以修改数字列:@lagbox this,现在,似乎是最好的解决方案,因为
fresh
可以链接到
create
yea
refresh
返回当前实例以及更新的属性和关系,并且
fresh
返回一个新实例,因此无论采用哪种方式,您都可以从这些方法返回模型:)