我见过很多人使用这种方式来检查 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);
上面是否检查用户是否已创建?
最佳答案
检查模型是否保存
save()
将返回一个 bool 值,已保存或 未 已保存。所以你可以这样做:
$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');
}
关于php - 检查 laravel 模型是否已保存或查询是否已执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27877948/