FRESH VS REFRESH
Jan 13, 2024 Copy Link
Let's demonstrate the difference between the `fresh`
and `refresh`
methods
The core difference is that the
`refresh`
method copies the model instance by REFERENCE.
use App\Models\User;
use Illuminate\Support\Facades\Route;
Route::get('fresh', fn () => User::first()->freshCurrentUser());
Route::get('refresh', fn () => User::first()->refreshCurrentUser());
Initially, let's check out the `fresh`
method:
/**
* Freshes the current user instance with fake data.
*/
public function freshCurrentUser()
{
$fakeName = fake()->name;
$this->name = $fakeName;
// Fresh the current instance from the database
$fresh = $instance->fresh();
$fresh->name = 'Name: ' . $fakeName;
$fresh->save();
// {
// "fakeName": "Mrs. Neha Smitham"
// "instance": {
// "name": "Mrs. Neha Smitham"
// },
// "fresh": {
// "name": "Name: Mrs. Neha Smitham"
// }
// }
}
In addition, we shall monitor the `refresh`
method:
/**
* Refreshes the current user instance with fake data.
*/
public function refreshCurrentUser()
{
...
// Refresh the user instance
$refresh = $instance->refresh();
$refresh->name = 'Name: ' . $fakeName;
$refresh->save();
// {
// "fakeName": "Mrs. Neha Smitham",
// "instance": {
// "name": "Name: Mrs. Neha Smitham"
// },
// "refresh": {
// "name": "Name: Mrs. Neha Smitham"
// }
// }
}
You may have noticed from the previous responses that the
instance
andrefresh
are equal whereas theinstance
andfresh
are not, meaning theinstance
andrefresh
have copied by REFERENCE.