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", ]