Laravel 5
На основе статьи https://medium.com/@JinoAntony/10-hidden-laravel-eloquent-features-you-may-not-know-efc8ccc58d9e
Laravel настолько богат на возможности, что многие из них даже не описаны в официальной документации. В этой статье вы узнаете о некоторых из них.
1. Получить исходное значение атрибута
После изменения атрибута в eloquent-объекте вы можете получить исходное значение с помощью метода getOriginal()
1 2 3 4 5 6 7 |
$user = App\User::first(); $user->name; //John $user->name = "Peter"; //Peter $user->getOriginal('name'); //John $user->getOriginal(); //Original $user record |
2. Определить, изменена ли модель
Можно с помощью метода isDirty()
1 2 3 4 5 |
$user = App\User::first(); $user->isDirty(); //false $user->name = "Peter"; $user->isDirty(); //true |
Также можно проверить изменение конкретного атрибута
1 2 |
$user->isDirty('name'); //true $user->isDirty('age'); //false |
3. Получить измененные атрибуты
Можно с помощью метода getChanges().
1 2 3 4 5 |
$user->getChanges() //[ "name" => "Peter", ] |
4. Изменение названия столбца deleted_at
По умолчанию при мягком удалении (soft delete) Laravel работает со столбцом deleted_at. Вы можете изменить название, определив свойство DELETED_AT.
1 2 3 4 5 6 7 8 9 10 |
class User extends Model { use SoftDeletes; * The name of the "deleted at" column. * * @var string */ const DELETED_AT = 'is_deleted'; } |
Второй способ:
1 2 3 4 5 6 7 8 9 |
class User extends Model { use SoftDeletes; public function getDeletedAtColumn() { return 'is_deleted'; } } |
5. Сохранение модели вместе со связями
Вы можете сохранить модель с соответствующими связями с помощью метода push()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class User extends Model { public function phone() { return $this->hasOne('App\Phone'); } } $user = User::first(); $user->name = "Peter"; $user->phone->number = '1234567890'; $user->push(); // обновление и user, и phone в базе |
6. Загрузка обновленной модели
Если модель изменилась в базе данных, то подгрузить изменения можно с помощью метода fresh()
1 2 3 4 5 6 7 8 9 10 |
$user = App\User::first(); $user->name; // John // В этот момент в другом потоке user изменился. // Например, 'name' -> Peter. $updatedUser = $user->fresh(); $updatedUser->name; // Peter $user->name; // John |
7. Обновление изменной модели
Обновить объект из базы данных можно с помощью метода refresh(). Также обновятся все связи.
1 2 3 4 5 6 7 8 |
$user = App\User::first(); $user->name; // John // В этот момент в другом потоке user изменился. // Например, 'name' -> Peter. $user->refresh(); $user->name; // Peter |
8. Определить, индентичны ли модели
Определить, одинаковые ли id у моделей и принадлежат ли они одной таблице можно с помощью метода is()
1 2 3 4 5 6 |
$user = App\User::find(1); $sameUser = App\User::find(1); $diffUser = App\User::find(2); $user->is($sameUser); // true $user->is($diffUser); // false |
9. Клонирование модели
Метода replicate() создает копию модели как новую сущность, которую нужно затем сохранить.
1 2 3 4 |
$user = App\User::find(1); $newUser = $user->replicate(); $newUser->save(); |
10. Указание атрибутов в методе find()
В методах find() и findOrFail() вторым аргументом можно указать атрибуты для выборки из базы
1 2 3 |
$user = App\User::find(1, ['name', 'age']); $user = App\User::findOrFail(1, ['name', 'age']); |