laravel insert 、save、update、create 的区别

insert:插入数据时,需要维护 created_at 和 updated_at字段

要在数据库中创建新记录,只需创建一个新的模型实例,并在模型上设置属性,然后调用 save 方法:

<?php

namespace App\Http\Controllers;

use App\Flight;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class FlightController extends Controller
{
    /**
     * 创建一个新的航班实例。
     *
     * @param  Request  $request
     * @return Response
     */
    public function store(Request $request)
    {
        // 验证请求...

        $flight = new Flight;

        $flight->name = $request->name;

        $flight->save();
    }
}

save:无论插入或者更新,会自动维护,无需手动操作

用 save 方法。同样的,updated_at 时间戳将会被自动更新,所以我们不需要手动设置它的值:

$flight = App\Flight::find(1);

$flight->name = 'New Flight Name';

$flight->save();

update:更新操作,自动维护 updated_at字段

save 方法也可以用来更新数据库中已经存在的模型。要更新模型,则须先检索模型,再设置要更新的属性,然后再调用 save 方法。同样的,updated_at 时间戳将会被自动更新,所以我们不需要手动设置它的值:

$flight = App\Flight::find(1);

$flight->name = 'New Flight Name';

$flight->save();

update 方法需要传入表示要更新的字段的字段的值的键值对数组。

通过 Eloquent 执行批量更新时,saved 和 updated 的模型事件不会被更新的模型触发。这是因为执行批量更新时,不会有任何模型被检索出来。

create:自动维护 created_at 和 updated_at两个字段

你也可以使用 create 方法来保存新模型,然后被插入数据库的模型实例会从方法返回。不过,在这之前,你需要先在你的模型上指定 fillable 或 guarded 的属性,因为所有的 Eloquent 模型在默认情况下都不能进行批量赋值。

$flight = App\Flight::create(['name' => 'Flight 10']);
阅读 159

推荐阅读