Laravel 11 Eloquent ORM

Laravel — це багатофункціональна платформа MVC, яка постійно розвивається

Eloquent ORM у Laravel забезпечує просту та ефективну реалізацію ActiveRecord для роботи з вашою базою даних.

У цій статті ми побачимо деякі маловідомі та дуже корисні функції.

3 хвилин

Давайте подивимося в цій статті, як Laravel 11 Eloquent ORM може допомогти нам вирішити конкретні проблеми.

Колонка deleted_at для м’якого видалення

Laravel обробляє м’які видалення через стовпець deleted_at. Це означає, що у нас є доступна властивість, яка дозволяє встановити дійсність м’якого видалення. Потім ми можемо змінити налаштування, явно визначивши властивість DELETED_AT всередині класу, який визначає модель:

class House extends Model
{
    use SoftDeletes;

     * The name of the "deleted at" column.
     *
     * @var string
     */
    const DELETED_AT = 'is_deleted';
}

Або визначивши метод завжди всередині класу, в якому ми хочемо керувати програмним видаленням:

class House extends Model
{
    use SoftDeletes;

    public function getDeletedAtColumn()
    {
        return 'is_deleted';
    }
}

Як керувати soft deletes

Керувати soft deletes У нас є кілька доступних методів, зокрема:

  • withTrashed(): тимчасово включити видалені записи, м'яко;
  • onlyTrashed(): тимчасово включати лише видалені записи;
  • restore(): відновити видалені записи;

Ця група методів використовується для роботи з функцією м’якого видалення в Laravel.
Я написав дуже докладну статтю про все, що стосується Soft Delete

$houses = House::withTrashed()->get();
$trashedHouses = House::onlyTrashed()->get();
House::withTrashed()->where('id', 1)->restore();

Клон a Model

Ви можете клонувати шаблон за допомогою replicate(). Результатом буде копія моделі в новому неіснуючому екземплярі. У наступному прикладі виконується метод replicate() суль модельло $house, генеруючи нову модель $newHouse який за допомогою збереження створить новий запис, рівний тому, який було видобуто за допомогою find().

$house = App\House::find(1);
$newHouse = $house->replicate();
$newHouse->save();

Збережіть моделі та відносини

За допомогою методу можна зберегти модель і відповідні зв’язки push(). У наступному прикладі ми створюємо нову модель типу House, з назвою Villa Cleopatra та адреса будівельного майданчика Mulberry Street: виклик методу push() на Model House давайте врятуємо обох Model House що Model WorkSite.

class House extends Model
{
    public function worksite()
    {
        return $this->hasOne('App\WorkSite');
    }
}
$house = House::first();
$house->name = "Villa Cleopatra";
$house->worksite->address = 'Mulberry Street';
$house->push(); // This will update both house and worksite record in DB

Як отримати оригінальні атрибути

Якщо після редагування запису Красномовна, якщо ви хочете перечитати оригінальні значення: ви можете це зробити. Для цього можна викликати функцію getOriginal()

$house = App\House::first(); 
$house->name; //Villa Cleopatra
$house->name = "Villa Giulio Cesare"; // Villa Giulio Cesare
$house->getOriginal('nome') ; //Villa Cleopatra
$house->getOriginal() ; //Original $house record

Як перевірити, чи не змінилася модель

Щоб визначити, чи була змінена конкретна модель або атрибут, можна скористатися функцією isDirty()

$house = App\House::first();
$house->isDirty();          //false
$house->name = "Villa Giulio Cesare";
$house->isDirty();          //true

Ви також можете перевірити, чи було змінено певний атрибут.

$house->isDirty('name');    //true
$house->isDirty('address');     //false

Як змінити атрибути

Якщо ми визначимо, що модель була змінена, і ми хочемо детально знати, що було змінено, тоді ми можемо зробити це за допомогою функції getChanges(). Функція повертає масив зі списком атрибутів, залучених до модифікації.

$user->getChanges()      // [  "name" => "Peter",  ]

Авторе

Вам може бути цікаво…