10 скрытых фишек Laravel Eloquent

10 скрытых фишек Laravel Eloquent

Приёмы работы с 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
Перевод: Demiurge Ash