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

时间:2015-01-10 15:40:17

标签: php mysql validation laravel model

我见过很多人用这种方式检查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);

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

4 个答案:

答案 0 :(得分:46)

检查模型是否已保存

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');
}

答案 1 :(得分:7)

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

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

答案 2 :(得分:3)

当我使用Model::create方法时,我会这样做:

$activity = Activity::create($data);

if ($activity->exists) {
   // success
} else {
   // failure 
}

至于Save方法,因为$model->save()返回Bool

,因此更容易
$category = new Category();
$category->category_name = $request->category_name;
$is_saved = $category->save();

if ($is_saved) {
    // success
} else {
    // failure 
}

答案 3 :(得分:0)

/**
 * 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.');
}