Decoding Laravel : Eloquent touch()August 03, 2017
Today we are going to see about laravel eloquent touch method. Touch
touch() is a method offered by eloquent that is used to update the
updated_at field on the database table for the given model. For example, if you have a login system and you wanted to update the updated_at field whenever a user logs in (as last login), then you do this by
$user->touch(). Laravel updates the updated_at field to current date and time.
We knew that all of our models extend Laravel core Model
Illuminate\Database\Eloquent\Model. Model offers touch() method. We will see how this works.
First laravel checks whether our model has timestamps columns. If not, it’ll simply return
false i.e., it doesn't have to do anything. If we do have timestamps, then it calls
$this->freshTimestamp() is nothing but the new instance of Carbon
Then it checks whether updated_at field is dirty(i.e., whether it has been modified already). If true, laravel will not perform any action and prevent query execution. Else, we will update the updated_at field. So, lets break
isDirty() step by step.
$this->getDirty(), laravel checks for two things.
- Check if any new attribute has been added to attributes array apart from original attributes
- Checks whether old attributes and new attributes are same and numerical equivalent
Then it checks whether parameters passed to this function is
null. If true, it will check whether count of modified attributes is greater than zero and return
If attributes are not null, then
We are checking if it is array, if not, we are converting it to array by calling func_get_args() method which returns the params as array.
Then, we are returning
true if modified variable(updated_at) is found on attributes list and
If we get
false(i.e., updated_at field is not modifed), then
$this->setUpdatedAt() is called
After updating the updated_at field, we are checking if our model has been created and saved before. If not, we are going to update created_at field as well.
Thats it! This is how laravel eloquent touch works under the hoods.