【发布时间】:2021-01-20 04:56:03
【问题描述】:
我的 MySQL DB 将字段 formed_id 的默认值设置为 0:
`former_id` bigint(20) NOT NULL DEFAULT 0
当我使用firstOrCreate()方法插入新记录时,我没有设置formed_id:
$record = Record::firstOrCreate(
[
"name" => "myName",
"nick" => "myNick",
]
);
然后输出返回:
{
"id": 10,
"name" => "myName",
"nick => "myNick",
"created_at" => "2020-10-01 00:00:00",
"updated_at" => "2020-10-01 00:00:00",
}
不包含设置为默认值的former_id 字段0。
要获取输出模型中的所有文件,我需要执行第二次查询:
$record = Record::firstOrCreate(
[
"name" => "myName",
"nick => "myNick",
]
);
$fullRecord = Record::find($record->id)
在这种情况下,输出正确返回:
{
"id": 10,
"name" => "myName",
"nick => "myNick",
"former_id" => 0,
"created_at" => "2020-10-01 00:00:00",
"updated_at" => "2020-10-01 00:00:00",
}
我不喜欢这个解决方案,因为我需要执行两个查询而不是一个;有没有办法直接从 firstOrCreate() 插入中获取所有字段?
谢谢。
【问题讨论】:
-
插入后尝试刷新模型。
$record = Record::firstOrCreate($details)->refresh(); -
您是手动创建表还是使用迁移文件?如果您使用了迁移文件,请将其代码添加到您的问题中。
-
@Prodiger 我试过
->refresh()但它是一样的,总是执行两个查询。 @Rwd 是的,这些表是手动创建的;我正在使用现有的数据库。没有使用 Laravel 迁移。 -
firstOrNew()方法中也会发生同样的事情 -
我在不需要时阻止第二次查询的方法是检查
$record->wasRecentlyCreated是否为true,如果是,然后运行$record->refresh()以补充水分默认列
标签: sql laravel eloquent laravel-8