检查 laravel 模型是否已保存或查询是否已执行

2022-08-30 11:27:32

我见过很多人用这种方式来检查一个laravel模型是否被保存了。所以现在我想知道这是否是一种安全的方式。

我还可以检查下面的查询是否像这样执行

检查模型是否已保存

例如:

$myModel = new User();

$myModel->firstname = Input::get('firstname');
$myModel->lastname = Input::get('lastname');

$myModel->save();

//Check if user got saved
if ( ! $myModel->save())
{
  App::abort(500, 'Error');
}

//User got saved show OK message
return Response::json(array('success' => true, 'user_added' => 1), 200);

以上是否是检查我的模型何时保存的安全方法?

检查查询是否返回结果

例如:

$UserProduct = Product::where('seller_id', '=', $userId)->first();

if (! $UserProduct)
{
    App::abort(401); //Error
}

如果找不到产品,上述内容是否会返回错误?

检查查询是否已执行

例如:

$newUser = User::create([
        'username' => Input::get('username'),
        'email' => Input::get('email')
]);

//Check if user was created
if ( ! $newUser)
{
    App::abort(500, 'Some Error');
}


//User was created show OK message
return Response::json(array('success' => true, 'user_created' => 1), 200);

上述内容是否检查是否已创建用户?


答案 1

检查模型是否已保存

save()将返回布尔值,已保存或保存。因此,您可以执行以下操作之一:

$saved = $myModel->save();

if(!$saved){
    App::abort(500, 'Error');
}

或直接保存在以下情况下:

if(!$myModel->save()){
    App::abort(500, 'Error');
}

请注意,像您的示例中那样连续调用两次是没有意义的。顺便说一句,许多错误或问题都会阻止模型被保存,无论如何都会引发异常......save()

检查查询是否返回结果

first()当找不到任何记录时将返回,以便您的检查工作找到。但是,作为替代方案,您也可以使用当找不到任何内容时会自动抛出一个:nullfirstOrFail()ModelNotFoundException

$UserProduct = Product::where('seller_id', '=', $userId)->firstOrFail();

(这同样适用于 和find()findOrFail())

检查查询是否已执行

不幸的是,这并不容易。来源如下:create

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

    $model->save();

    return $model;
}

如您所见,它将使用 创建模型的新实例,然后调用 。现在,如果在哪里返回 true,您将不知道,因为无论如何您都会得到一个模型实例。例如,您可以做的是检查模型ID(因为只有在保存记录并返回新创建的id后,该ID才可用)$attributessave()save()

if(!$newUser->id){
    App::abort(500, 'Some Error');
}

答案 2

您还可以检查模型上的属性。public$exists

if ($myModel->exists) {
    // Model exists in the database
}

推荐