Eloquent中一些其他的create方法

Posted 小帅豹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Eloquent中一些其他的create方法相关的知识,希望对你有一定的参考价值。

firstOrCreatefirstOrNew#

还有两种其它方法,你可以用来通过属性批量赋值创建你的模型:firstOrCreate 和firstOrNewfirstOrCreate 方法将会使用指定的字段/值对,来尝试寻找数据库中的记录。如果在数据库中找不到模型,则会使用指定的属性来添加一条记录。

firstOrNew 方法类似 firstOrCreate 方法,它会尝试使用指定的属性在数据库中寻找符合的纪录。如果模型未被找到,将会返回一个新的模型实例。请注意 firstOrnew 返回的模型还尚未保存到数据库。你需要通过手动调用save 方法来保存它:

// 通过name属性检索航班,当结果不存在时创建它...
$flight = App\Flight::firstOrCreate([‘name‘ => ‘Flight 10‘]);

// 通过name属性检索航班,当结果不存在的时候用name属性和delayed属性去创建它
$flight = App\Flight::firstOrCreate(
    [‘name‘ => ‘Flight 10‘], [‘delayed‘ => 1]
);

// 通过name属性检索航班,当结果不存在时实例化一个新实例...
$flight = App\Flight::firstOrNew([‘name‘ => ‘Flight 10‘]);

// 通过name属性检索航班,当结果不存在的时候用name属性和delayed属性去实例化一个新实例
$flight = App\Flight::firstOrNew(
    [‘name‘ => ‘Flight 10‘], [‘delayed‘ => 1]
);

updateOrCreate#

其次,你可能会碰到模型已经存在则更新,否则创建新模型的情形,Laravel 提供了一个 updateOrCreate 方法来一步完成该操作,类似 firstOrCreate 方法, updateOrCreate 方法会持久化模型,所以无需调用 save() :

// If there‘s a flight from Oakland to San Diego, set the price to $99.
// If no matching model exists, create one.
$flight = App\Flight::updateOrCreate(
    [‘departure‘ => ‘Oakland‘, ‘destination‘ => ‘San Diego‘],
    [‘price‘ => 99]
);
参考地址:https://d.laravel-china.org/docs/5.5/eloquent#mass-assignment

以上是关于Eloquent中一些其他的create方法的主要内容,如果未能解决你的问题,请参考以下文章

如何模拟 Laravel Eloquent 模型的静态方法?

Laravel 的 Eloquent 公共静态函数“create”在 Model.php 中发生了啥?

Laravel/Eloquent 建议覆盖 trait 属性?

通过 created_at 订购不适用于 Eloquent 模型

Laravel Eloquent 查找日期超过 2 天的行

Laravel:使用 Query Builder 或 Eloquent ORM 时在每次插入/更新时执行一些任务