Приёмы работы с Eloquent, о которых вы еще не слышали.
01: Указывайте атрибуты в методе find()
При использовании методов find() и findOrFail() во втором аргументе вы можете указать нужные столбцы.
$user = App\User::find(1, ['name', 'age']); $user = App\User::findOrFail(1, ['name', 'age']);
02: Клонируйте модель
Вы можете склонировать модель, используя replicate(). Это создаст новую копию модели.
$user = App\User::find(1); $newUser = $user->replicate(); $newUser->save();
03: Проверьте модели на идентичность
Используя метод is() можно узнать имеют ли две модели один ID и одну таблицу.
$user = App\User::find(1); $sameUser = App\User::find(1); $diffUser = App\User::find(2); $user->is($sameUser); // true $user->is($diffUser); // false
04: Перезагрузка модели
Можно перезагрузить модель, чтобы получить обновленные значения из базы данных.
$user = App\User::first(); $user->name; // John // запись пользователя была обновлена в другом потоке. например, поле 'name' изменилось на Peter. $user->refresh(); $user->name; // Peter
05: Загрузка свежей модели
Для получения нового экземпляра модели из базы данных используйте fresh().
Примечание: это не обновление текущей модели, а именно получение нового экземпляра.
$user = App\User::first(); $user->name; // John // запись пользователя была обновлена в другом потоке. например, поле 'name' изменилось на Peter. $updatedUser = $user->fresh(); $updatedUser->name; // Peter $user->name; // John
06: Сохранение модели с отношениями
Используйте push() для сохранения модели с её отношениями.
class User extends Model { public function phone() { return $this->hasOne('App\Phone'); } } $user = User::first(); $user->name = "Peter"; $user->phone->number = '1234567890'; $user->push(); // Это обновит и пользователя и телефон в базе данных
07: Создайте свой столбец deleted_at
По умолчанию Laravel выполняет «мягкое удаление», используя столбец delete_at. Вы можете изменить это, создав свой собвственный столбец для этих целей.
class User extends Model { use SoftDeletes; * Название столбца "deleted at" * * @var string */ const DELETED_AT = 'is_deleted'; }
или определив читателя:
class User extends Model { use SoftDeletes; public function getDeletedAtColumn() { return 'is_deleted'; } }
08: Получение измененных атрибутов модели
Используя метод getChanges() вы можете получить измененные атрибуты модели.
$user->getChanges(); //[ "name" => "Peter", ]
09: Проверьте, менялись ли данные в модели
С помощью метода isDirty() можно проверить изменялась ли модель.
$user = App\User::first(); $user->isDirty(); //false $user->name = "Peter"; $user->isDirty(); //true
Вы также можете проверить изменение определенных атрибутов:
$user->isDirty('name'); //true $user->isDirty('age'); //false
10: Получение исходных значений
После изменения записей в Eloquent вы можете получить исходное значение атрибута при помощи метода getOriginal().
$user = App\User::first(); $user->name; //John $user->name = "Peter"; //Peter $user->getOriginal('name'); //John $user->getOriginal(); //Исходное значение $user
Автор: Jebran Ali
Перевод: Алексей Широков
Наш Телеграм-канал — следите за новостями о Laravel.