laravel orm的Create方法如何判断成功?

pigLoveRabbit
  • 6.7k

clipboard.png
接下来如何判断插入数据库成功呢?

回复
阅读 15.4k
5 个回答
✓ 已被采纳

laravel create 操作成功就会返回一个model

    //Laravel5.3 \Illuminate\Database\Eloquent\Model
    public static function create(array $attributes = [])
    {
        $model = new static($attributes);

        $model->save();

        return $model;
    }
    
    
    public function save(array $options = [])
    {
        ...
        
        // If the "saving" event returns false we'll bail out of the save and return
        // false, indicating that the save failed. This provides a chance for any
        // listeners to cancel save operations if validations fail or whatever.
        if ($this->fireModelEvent('saving') === false) {
            return false;
        }
        ...
    }
        

看源码知道如果save失败,返回false;如果成功,返回model。

谢谢邀请。create方法应该有返回值的。打印输出看看

创建成功 会返回model 不成功 会返回null 可以直接 if(!result) 判断

李惟
  • 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 模型都默认不可进行批量赋值。
宣传栏