laravel Eloquent create方法插入数据,如何知道是否更新成功?

Double段
  • 207

我想使用laravel中的Eloquent中的create方法插入数据。这个方法默认会返回model对象,但是如何得知插入数据是否成功呢?之前的框架都会返回一个bool类型的。

create方法代码如下:

public static function create(array $attributes = [])
    {
        $model = new static($attributes);

        $model->save();

        return $model;
    }
回复
阅读 7.4k
3 个回答

你可以采用另一个方法save(),具体使用方法见下方

$obj = new Order;
$obj->status = 1;
$obj->price = 100;
$res = $obj->save();//返回true or false
if(!$res){
    //Log::error('failed', ['context' => $arrData]);
    return 0;
}
return $obj -> id;//返回新建记录的ID
Double段
  • 207

成功的话是返回一个model对象的,是不是一定会成功呢?

李惟
  • 2.1k

laravelEloquent create如果成功,返回model,如果失败执行SQL失败,抛出异常,下面是我再tinker中做的尝试:

php artisan tinker
Psy Shell v0.10.5 (PHP 8.0.1 — cli) by Justin Hileman
>>> $model = App\Model\Test\Tname::create(['id' => 19, 'name' => 'hjd', 'age' => 19]);
=> App\Model\Test\Tname {#4446
     id: 19,
     name: "hjd",
     age: 19,
   }
>>> App\Model\Test\Tname::create(['id' => 19, 'name' => 'hjd', 'age' => 19]);
Illuminate\Database\QueryException with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '19' for key 'id' (SQL: insert into `tname` (`id`, `name`, `age`) values (19, hjd, 19))'
>>> 
$tname = new App\Model\Test\Tname;
=> App\Model\Test\Tname {#4457}
>>> $tname->id = 19
=> 19
>>> $tname->name='hjd';
=> "hjd"
>>> $tname->age='19';
=> "19"
>>> $tname->save();
Illuminate\Database\QueryException with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '19' for key 'id' (SQL: insert into `tname` (`id`, `name`, `age`) values (19, hjd, 19))'
  • QueryException对象这里有说明laravel学习笔记
  • 这里补充说明一下,不知道为什么大家都说save返回的就是boolean值,上面我测试和create一样是抛出异常的

如果需要捕获异常可以通过catch

<?php 
use Illuminate\Database\QueryException;
try 
{
    Static::create();
}
catch(QueryException $e) 
{
    // error
}

在文档中有一句提示:

你也可以使用 create 方法来保存新模型。 此方法会返回模型实例。 不过,在使用之前,你需要在模型上指定 fillableguarded 属性,因为所有的 Eloquent 模型都默认不可进行批量赋值。
宣传栏