Check if laravel model got saved or query got executed

后端 未结 4 1297
情歌与酒
情歌与酒 2020-12-01 04:11

I\'ve seen alot of people using this way to check if a laravel model got saved. So now I wonder if it is a safe way.

And also can I check if the queries bellow got e

相关标签:
4条回答
  • 2020-12-01 04:51

    Check if model got saved

    save() will return a boolean, saved or not saved. So you can either do:

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

    Or directly save in the if:

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

    Note that it doesn't make sense to call save() two times in a row like in your example. And by the way, many errors or problems that would keep the model from being saved will throw an exception anyways...

    Check if query returned a result

    first() will return null when no record is found so your check works find. However as alternative you could also use firstOrFail() which will automatically throw a ModelNotFoundException when nothing is found:

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

    (The same is true for find() and findOrFail())

    Check if query got executed

    Unfortunately with create it's not that easy. Here's the source:

    public static function create(array $attributes)
    {
        $model = new static($attributes);
    
        $model->save();
    
        return $model;
    }
    

    As you can see it will create a new instance of the model with the $attributes and then call save(). Now if save() where to return true you wouldn't know because you'd get a model instance anyways. What you could do for example is check for the models id (since that's only available after the record is saved and the newly created id is returned)

    if(!$newUser->id){
        App::abort(500, 'Some Error');
    }
    
    0 讨论(0)
  • 2020-12-01 04:52
    /**
     * 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.');
    }
    
    0 讨论(0)
  • 2020-12-01 05:03

    You can also check the public attribute $exists on your model.

    if ($myModel->exists) {
        // Model exists in the database
    }
    
    0 讨论(0)
  • 2020-12-01 05:04

    I would do such move to when I use Model::create method :

    $activity = Activity::create($data);
    
    if ($activity->exists) {
       // success
    } else {
       // failure 
    }
    

    As for the Save method it's easier because $model->save() returns Bool :

    $category = new Category();
    $category->category_name = $request->category_name;
    $is_saved = $category->save();
    
    if ($is_saved) {
        // success
    } else {
        // failure 
    }
    
    0 讨论(0)
提交回复
热议问题