10 красноречивых особенностей, о которых вы могли не знать

Со всеми функциями, которые доступны в Laravel "из коробки", их все сложно узнать. Некоторые функции даже не задокументированы должным образом. В этой статье я расскажу вам о десяти функциях Eloquent, о которых вы могли не знать.

1. Настраиваемые имена столбцов с отметками времени.

По умолчанию модели Laravel имеют отметки времени created_at и updated_at. Вы можете перезаписать эти имена столбцов, определив в своей модели постоянную переменную. Если ваша модель использует мягкое удаление, вы также можете перезаписать deleted_at имя столбца.

class User extends Model
{
    const CREATED_AT = 'created';
    const UPDATED_AT = 'last_update';
    const DELETED_AT = 'removed';
}

2. Существующее свойство

Свойство exists сообщает, существует ли объект в базе данных или нет. Когда вы создаете новый экземпляр модели, для свойства exists будет установлено значение false. После того, как ваша модель будет сохранена или получена из базы данных, для свойства exists будет установлено значение true.

$user = new User;
$user->name = 'George';
$user->email = '[email protected]';
$user->password = 'secret';
$user->exists; // false
$user->save();
$user->exists; // true

3. Грязный

Чтобы проверить, редактировалась ли модель с момента ее получения из базы данных, вы можете использовать метод isDirty. Полезно знать, что когда модель вообще не сохраняется, метод isDirty вернет true. Этот метод имеет необязательный параметр, который позволяет проверить, не является ли определенное свойство грязным.

Вы можете использовать метод getDirty, чтобы получить массив всех загрязненных свойств экземпляра модели.

$user = User::first();
$user->isDirty(); // false
$user->name = 'James';
$user->isDirty(); // true
$user->isDirty('email'); // false
$user->isDirty('name'); // true
$user->getDirty(); // ["name" => "James"]

4. Оригинал

Получить исходные значения атрибутов модели можно с помощью метода getOriginal. Этот метод имеет необязательный параметр, позволяющий получить исходное значение определенного свойства.

$user = User::first();
$user->name = 'James';

$user->getOriginal(); // Array with "name" => "George"
$user->getOriginal('name'); // "George"

5. Клонирование модели.

Клонировать модель совсем несложно. Это можно сделать, вызвав метод replicate в экземпляре модели.

$user = User::first();
$clonedUser = $user->replicate();

6. Преобразуйте модель или коллекцию в массив.

toArray может преобразовывать модель или коллекцию в простой массив PHP.

// Convert a model instance to an array
$user = User::first();
$user->toArray();
// Convert a collection to an array
$users = User::all();
$users->toArray();

7. Обновить

Метод обновления обновит модель, получив свежие данные из базы данных. Все его загруженные отношения также будут обновлены.

$user= User::where('name', 'George')->first();
$user->name= 'James';
$user->address->city = "New York";
$user->refresh();
$user->name; // "George"
$user->address->city; // "Washington"

8. Без событий

Иногда вы хотите создать или обновить модель без запуска каких-либо событий. В Laravel можно выполнить обратный вызов без запуска каких-либо событий модели для любого типа модели.

$user = User::withoutEvents(function () {
    return factory(User::class)->create(); 
});

9. Нажмите

Метод push сохраняет модель и все ее взаимосвязи.

$user = User::where('name', 'George')->first();
$user->age = 42;
$user->address->city = "New York"; 

Если вы просто вызовете метод сохранения для пользователя, адрес не будет сохранен.

$user->save();

При использовании метода push будут сохранены и пользователь, и адрес.

$user->push();

10. Force a delete on a soft delete model

В некоторых ситуациях вы хотите удалить модель с обратимым удалением из базы данных. Это можно сделать с помощью метода forceDelete.

$user = User::first();
$user->forceDelete();

Это десять функций Eloquent, которыми я хотел с вами поделиться. Поделитесь своими мыслями об этой статье. Обязательно ознакомьтесь с другими моими сообщениями. Большая часть моего контента посвящена Laravel. Не стесняйтесь оставлять комментарии, если у вас есть какие-либо отзывы, вопросы или вы хотите, чтобы я написал о другой теме, связанной с Laravel.