How to reload/refresh model from database in Laravel?

前端 未结 5 1145
既然无缘
既然无缘 2020-12-14 05:39

In some of my tests, I have a user model I have created and I run some methods that need to save certain attributes. In rails, I would typically call something like us

5条回答
  •  旧时难觅i
    2020-12-14 06:32

    There was a commit submitted to the 4.0 branch made in August to add a reload() method, but so far it hasn't been merged with the newer Laravel branches.

    But... Laravel 5 is providing a "fresh()" method that will return a new instance of the current model. Once you're using Laravel 5.0 or newer, you can reload a model like this:

    $model = $model->fresh(); 
    

    Note that fresh() doesn't directly update your existing $model, it just returns a new instance, so that's why we need to use "$model = ". It also accepts a parameter with is an array of relations that you want it to eager load.

    If you aren't yet using Laravel 5 but you want the same functionality, you can add this method to your model(s):

    public function fresh(array $with = array())
    {
        $key = $this->getKeyName();
        return $this->exists ? static::with($with)->where($key, $this->getKey())->first() : null;
    }
    

    Update: If you're using Laravel 5.4.24 or newer, there is now a $model->refresh() method that you can use to refresh the object's attributes and relationships in place rather than fetching a new object like fresh() does. See Jeff Puckett answer for more specifics on that.

提交回复
热议问题