一尘不染

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

mysql

我已经看到很多人使用这种方法来检查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);

上面是否检查用户是否已创建?


阅读 491

收藏
2020-05-17

共1个答案

一尘不染

检查模型是否保存

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

$saved = $myModel->save();

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

或直接保存在if中:

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

请注意,save()像您的示例一样,连续两次调用没有意义。顺便说一句,许多使模型无法保存的错误或问题总会引发异常。

检查查询是否返回结果

first()``null当找不到记录时将返回,以便您的检查有效。但是,您也可以使用替代方法firstOrFail()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;
}

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

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