Differences Between Update And Fill in Laravel

About Us:

We are from free coder. We are a group of web developers who are passionate about web development. You can learn from us php, laravel, node js, vue js, react js and many other topic on web developement.
we are very happy to help you.
free coder

Today what you are going to learn:

When you need to update a resource in Laravel, you might decide to use the update or the fill method.

Differences Between Update And Fill in Laravel

Let's take a look at the source code of the fill and update methods, in Illuminate\Database\Eloquent\Model.

The update and fill methods will only work on attributes that are mass assignable.

The update method:

public function update(array $attributes = [], array $options = [])
    if (! $this->exists) {
        return false;

    return $this->fill($attributes)->save($options);

The fill method:

public function fill(array $attributes)
    $totallyGuarded = $this->totallyGuarded();

    foreach ($this->fillableFromArray($attributes) as $key => $value) {
        $key = $this->removeTableFromKey($key);

        // The developers may choose to place some attributes in the "fillable" array
        // which means only those attributes may be set through mass assignment to
        // the model, and all others will just get ignored for security reasons.
        if ($this->isFillable($key)) {
            $this->setAttribute($key, $value);
        } elseif ($totallyGuarded) {
            throw new MassAssignmentException(sprintf(
                'Add [%s] to fillable property to allow mass assignment on [%s].',
                $key, get_class($this)

    return $this;

As you can see, the update method also calls the fill method. The only difference is that the update method writes the changes to the database afterwards.

What does the fill method do exactly?

After some logical checks if the attribute is "fillable", it will assign the given value from the $attributes array to the model, with the setAttribute method.

The setAttribute method assigns a value to an attribute on the model, after it has checked for any available mutators and attribute casts.

It will not write the assigned values to the database. For this you would have to call the save method manually.

The primary benefit of using the fill method, is that it gives you the ability to assign values to attributes that aren't mass assignable, before calling save. For lesson when first_name and last_name of a user are "fillable", and password isn't, you could update the model like this:

    'first_name' => 'John',
    'last_name' => 'Doe',

$user->password = 'secret'; 


Recent Posts

Related Posts