Рубрики
Uncategorized

Семь должны знать и должны знать советы по моделированию laravel

Автор оригинала: David Wong.

Статья направляется профессиональному сообществу разработчиков laravel. Оригинальная ссылка: https://learnku.com/laravel/t

Когда я впервые начал разрабатывать в laravel, я почувствовал, что при реализации модели можно было бы сделать многое лучше. Изучив класс красноречивых моделей, я обнаружил, что вы можете делать некоторые интересные вещи со своей моделью, которые заставят вас чувствовать себя более расслабленно.

В этой статье я дам вам семь советов, чтобы все, кто использует laravel, знали, как максимально использовать вашу модель.

1 сначала давайте создадим модель

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

php artisan make:model Models/Product

Это будет сделано в приложение/Модели Создать Продукт Модели, что сэкономит вам время, перемещая модели в соответствующие папки.

2 тип атрибута преобразования

$приведения Свойство предоставляет способ приведения свойства к некоторым типам данных.

protected $casts = [
    'is_published' => 'boolean'
];

Свойство is_publish теперь будет приведено к логическому типу, даже если оно хранится в вашей базе данных целое число . Существует также множество способов преобразования атрибутов в другие типы, такие как дата Сумма дата и время .

Я часто вижу неправильное поведение, то есть в файле шаблона блейда дата Сумма дата и время Формат, подобный этому:

{{ $blog->created_at->format('Y-m-d') }}

В некоторых файлах шаблонов блейдов вы увидите несколько вариантов форматирования для одной и той же переменной. Эта проблема может быть решена с помощью атрибута $casts , чтобы решить проблему более эффективно.

о дата Сумма дата и время Вы можете указать следующий формат:

protected $casts = [
    'published_at' => 'datetime:Y-m-d',
];

Это всегда будет Y-m-d Формат возврата published_at Свойств, поэтому вам больше не нужно ничего форматировать в файле шаблона блейда.

3 видно или нет

Некоторые свойства не должны включаться в массив или представление модели в формате JSON, например Пароль Атрибут. На данный момент это $скрыто Пришло время для атрибутов.

protected $hidden = [
    'password'
];

Свойство $hidden * похоже на черный список свойств. Или вы можете использовать * $visible Свойство, чтобы задать белый список для свойства.

protected $visible = [
    'first_name',
    'last_name'
];

При установке в модели При использовании атрибута $visible * другие атрибуты будут автоматически скрыты. Это похоже на * $заполняемый Сумма $охраняемый Свойства одинаковы.

4 аксессуары

Иногда вы хотите объединить несколько атрибутов в один атрибут или просто хотите отформатировать атрибут. На этом этапе мы можем использовать средство доступа laravel.

Предположим, у вас есть модель пользователя, и у них есть имя пользователя и фамилия Атрибут. Если вы хотите указать свое полное имя, вы можете сделать это:

$this->first_name . ' ' . $this->last_name

Это очень наивный подход. Решение этой проблемы в laravel заключается в использовании аксессуаров. Средство доступа определяет метод в модели, используя следующий синтаксис:

get[NameOfAttribute]Attribute

Доступ для получения полного имени будет выглядеть следующим образом:

public function getFullNameAttribute() {
    return "{$this->first_name} {$this->last_name}";
}

Чтобы получить значение полного имени, вы просто вызываете средство доступа следующим образом:

$user->full_name

5 модификатор

Модификатор позволяет оперировать значением и задавать значение операции для атрибута $attributes * модели. Переменные имеют тот же синтаксис, что и аксессуары.

public function setLastNameAttribute($value) {
    $this->attributes['last_name'] = ucfirst($value);
}

Мутатор применит функцию * ucfirst * к фамилии и сохранит результат в атрибуте * $attributes*.

$user - > last_name ='jones'; // the result will be 'Jones'`

6 дополнительная ценность

Если у модели есть методы доступа и связи с моделью, они по умолчанию не добавляются в массив или представление модели в формате JSON. Для этого вам необходимо добавить методы доступа или ассоциации моделей в атрибут $appends . Теперь давайте продолжим использовать атрибут getFullName Этот пример средства доступа:

$appends = [
    'full_name'
];

Будьте осторожны: средства доступа, добавленные в свойство $appends, указаны в номенклатуре serpentine, даже если средство доступа определено в номенклатуре Hump.

Давайте предположим, что между моделью пользователя и моделью блога существует соотношение “один ко многим”.

public function blogs() {
    return $this->hasMany(App\Blog::class);
}

Чтобы добавить блоги в модель, вам просто нужно добавить их в $добавляет Свойства:

$appends = [
    'full_name',
    'blogs'
];

Конечно, мы можем указать добавленные свойства. Например, если вам нужен только идентификатор и заголовок Добавить в модель.

$appends = [
    'full_name',
    'blogs:id,title'
];

7 финальный штрих

Когда одна модель существует с другой Принадлежит Или Принадлежит При связывании отношений модели, например, комментарий принадлежит блогу, в некоторых случаях это может помочь обновить метку времени родителя при обновлении дочерних данных. Эту проблему можно решить, добавив отношение к свойству $touch .

class Comment extends Model
{
    protected $touches = ['blog'];

    public function blog()
    {
        return $this->belongsTo(App\Blog::class);
    }
}

Когда модель комментариев обновляется, атрибут updated_at модели блога.