РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
168 of 1392 menu

Атрибут appends

Атрибут appends в моделях Eloquent позволяет указать список вычисляемых полей, которые должны автоматически добавляться к результатам запроса в виде дополнительных свойств. Это удобно, когда нужно включить в выборку данные, полученные через аксессоры или вычисляемые значения, без ручного добавления в каждом запросе. Атрибут представляет собой защищённый массив, содержащий имена полей, которые будут добавлены к экземплярам модели при их получении из базы данных.

Синтаксис

<?php use Illuminate\Database\Eloquent\Model; class ModelName extends Model { protected $appends = ['field1', 'field2', 'field3']; } ?>

Пример

Давайте добавим в модель Article вычисляемое поле 'full_title', которое будет формироваться из полей 'title' и 'subtitle':

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $appends = ['full_title']; public function getFullTitleAttribute() { return $this->title . ' - ' . $this->subtitle; } } ?>

Теперь при получении записей в контроллере поле 'full_title' будет доступно автоматически:

<?php namespace App\Http\Controllers; use App\Models\Article; class ArticleController extends Controller { public function index() { $articles = Article::all(); foreach ($articles as $article) { echo $article->full_title; } } } ?>

Результат выполнения кода для статей с заголовками:

"First Article - Subtitle one" "Second Article - Subtitle two" "Third Article - Subtitle three"

Пример

Давайте добавим вычисляемое поле 'is_new', которое будет определять, создана ли статья в течение последних 7 дней:

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Carbon\Carbon; class Article extends Model { protected $appends = ['is_new']; public function getIsNewAttribute() { return $this->created_at->diffInDays(Carbon::now()) <= 7; } } ?>

Теперь при выборке статей поле 'is_new' будет автоматически добавлено к каждой модели:

<?php namespace App\Http\Controllers; use App\Models\Article; class ArticleController extends Controller { public function index() { $articles = Article::take(3)->get(); foreach ($articles as $article) { echo $article->title . ': ' . ($article->is_new ? 'New' : 'Old'); } } } ?>

Результат выполнения кода:

"First Article: New" "Second Article: Old" "Third Article: Old"

Пример

Давайте рассмотрим возможность добавления нескольких вычисляемых полей одновременно. Добавим в модель User поля 'full_name' и 'short_info':

<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $appends = ['full_name', 'short_info']; public function getFullNameAttribute() { return $this->first_name . ' ' . $this->last_name; } public function getShortInfoAttribute() { return $this->email . ' - ' . $this->full_name; } } ?>

Теперь оба вычисляемых поля будут доступны при выборке пользователей:

<?php namespace App\Http\Controllers; use App\Models\User; class UserController extends Controller { public function index() { $users = User::take(2)->get(); foreach ($users as $user) { echo $user->full_name . ' - ' . $user->short_info; } } } ?>

Результат выполнения кода:

"John Doe - john@example.com - John Doe" "Jane Smith - jane@example.com - Jane Smith"

Смотрите также

  • атрибут hidden,
    который скрывает поля при преобразовании в массив или JSON
  • атрибут casts,
    который определяет типы данных для атрибутов модели
  • атрибут fillable,
    который определяет поля для массового заполнения
  • атрибут guarded,
    который определяет защищённые поля от массового заполнения
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить