检查 laravel 模型是否已保存或查询是否已执行
Check if laravel model got saved or query got executed
我见过很多人使用这种方式来检查 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);
以上是检查我的模型是否保存的安全方法吗?
检查查询是否return得到结果
例如:
$UserProduct = Product::where('seller_id', '=', $userId)->first();
if (! $UserProduct)
{
App::abort(401); //Error
}
如果没有找到产品,以上return是否出错?
检查查询是否被执行
例如:
$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()
将 return 一个布尔值,保存或 不 保存。所以你可以这样做:
$saved = $myModel->save();
if(!$saved){
App::abort(500, 'Error');
}
或者直接保存在if:
if(!$myModel->save()){
App::abort(500, 'Error');
}
请注意,像您的示例那样连续两次调用 save()
是没有意义的。顺便说一下,许多阻止模型保存的错误或问题无论如何都会抛出异常...
检查查询是否return得到结果
first()
将 return 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()
到 return true 你不会知道,因为无论如何你都会得到一个模型实例。例如,您可以做的是检查模型 ID(因为只有在保存记录并且新创建的 ID 为 returned)
后才可用
if(!$newUser->id){
App::abort(500, 'Some Error');
}
/**
* Store a newly created country in storage.
*
* @url /country
* @method POST
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function store(Request $request)
{
# Filer & only get specific parameters.
$request = $request->only('code', 'name', 'status');
# Assign login user(Auth Control).
$request['created_by'] = Auth::user()->id;
# Insert data into `countries` table.
$country = Country::create($request);
if(!$country)
throw new Exception('Error in saving data.');
}
您还可以检查模型的 public
属性 $exists
。
if ($myModel->exists) {
// Model exists in the database
}
当我使用 Model::create
方法时,我会这样做:
$activity = Activity::create($data);
if ($activity->exists) {
// success
} else {
// failure
}
至于保存方法,它更容易,因为 $model->save()
returns Bool
:
$category = new Category();
$category->category_name = $request->category_name;
$is_saved = $category->save();
if ($is_saved) {
// success
} else {
// failure
}
我见过很多人使用这种方式来检查 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);
以上是检查我的模型是否保存的安全方法吗?
检查查询是否return得到结果
例如:
$UserProduct = Product::where('seller_id', '=', $userId)->first();
if (! $UserProduct)
{
App::abort(401); //Error
}
如果没有找到产品,以上return是否出错?
检查查询是否被执行
例如:
$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()
将 return 一个布尔值,保存或 不 保存。所以你可以这样做:
$saved = $myModel->save();
if(!$saved){
App::abort(500, 'Error');
}
或者直接保存在if:
if(!$myModel->save()){
App::abort(500, 'Error');
}
请注意,像您的示例那样连续两次调用 save()
是没有意义的。顺便说一下,许多阻止模型保存的错误或问题无论如何都会抛出异常...
检查查询是否return得到结果
first()
将 return 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()
到 return true 你不会知道,因为无论如何你都会得到一个模型实例。例如,您可以做的是检查模型 ID(因为只有在保存记录并且新创建的 ID 为 returned)
if(!$newUser->id){
App::abort(500, 'Some Error');
}
/**
* Store a newly created country in storage.
*
* @url /country
* @method POST
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function store(Request $request)
{
# Filer & only get specific parameters.
$request = $request->only('code', 'name', 'status');
# Assign login user(Auth Control).
$request['created_by'] = Auth::user()->id;
# Insert data into `countries` table.
$country = Country::create($request);
if(!$country)
throw new Exception('Error in saving data.');
}
您还可以检查模型的 public
属性 $exists
。
if ($myModel->exists) {
// Model exists in the database
}
当我使用 Model::create
方法时,我会这样做:
$activity = Activity::create($data);
if ($activity->exists) {
// success
} else {
// failure
}
至于保存方法,它更容易,因为 $model->save()
returns Bool
:
$category = new Category();
$category->category_name = $request->category_name;
$is_saved = $category->save();
if ($is_saved) {
// success
} else {
// failure
}