Laravel jest bogatym w funkcje frameworkiem. Aczkolwiek poniższych przykładów nie znajdziesz w oficjalnej dokumentacji Laravela.
Oryginalne atrybuty
Po aktualizacji danego rekordu można pobrać jego oryginalną wartość.
$user = App\User::first();
$user->name; //Olek
$user->name = "Filip"; //Filip
$user->getOriginal('name'); //Olek
$user->getOriginal(); //Oryginalny rekord $user z name Olek
Sprawdź czy w modelu nastąpiły zmiany
Metoda isDirty() zwróci true jeśli model był aktualizowany, a false kiedy w modelu nie nastąpiły żadne zmiany.
$user = App\User::first();
$user->isDirty(); //false
$user->name = "Filip";
$user->isDirty(); //true
Również można sprawdzić czy dany atrybut był zmieniany.
$user->isDirty('name'); //true
$user->isDirty('age'); //false
Historia zmian w modelu
Aby otrzymać taką historię trzeba odwołać się do metody getChanges().
$user->getChanges()
// [
// "name" => "Olek",
// ]
Aktualizacja modelu wraz z relacją
Możesz zapisać model, jak i relację tego modelu za jednym razem używając metody push().
class User extends Model
{
public function phone()
{
return $this->hasOne('App\Phone');
}
}
$user = User::first();
$user->name = "Filip";
$user->phone->number = '1234567890';
$user->push();
Odśwież aktualny model
Używając metody fresh() można przeładować model z nowymi atrybutami.
$user = App\User::first();
$user->name; //Olek
//aktualizacja name na 'Filip'
$updatedUser = $user->fresh();
$updatedUser->name; //Filip
$user->name; //Olek
Przeładuj istniejący model
Aby odświeżyć istniejący model należy użyć metody refresh().
$user = App\User::first();
$user->name; //Olek
//zmiana name na 'Filip'
$user->refresh();
$user->name; //Filip
Porównaj modele
Tutaj z pomocą przychodzi metoda is().
$user = App\User::find(1);
$sameUser = App\User::find(1);
$diffUser = App\User::find(2);
$user->is($sameUser); // true
$user->is($diffUser); // false
Sklonuj model
Przykład użycia metody replicate().
$user = App\User::find(1);
$newUser = $user->replicate();
$newUser->save();
Atrybuty w find() i findOrFail()
$user = App\User::find(1, ['name', 'age']);
$user = App\User::findOrFail(1, ['name', 'age']);
Więcej ciekawych funkcji znajdziesz tutaj https://laravel.com/api/5.6/Illuminate/Database/Eloquent/Model.html