Статья направляется профессиональному сообществу разработчиков 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 модели блога.