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

Атрибут table

Атрибут table в моделях Eloquent позволяет явно задать имя таблицы, с которой модель взаимодействует. По умолчанию Laravel автоматически определяет имя таблицы на основе имени класса модели в нижнем регистре и множественном числе. Например, для модели Article будет использоваться таблица articles, для User - users. Атрибут table переопределяет это поведение и позволяет привязать модель к существующей таблице с нестандартным именем. Это особенно полезно при работе с унаследованными базами данных или при необходимости использовать имя таблицы, которое не соответствует соглашениям Laravel.

Синтаксис

<?php class ModelName extends Model { protected $table = 'table_name'; } ?>

Пример

Создадим модель Article, которая использует таблицу blog_posts вместо стандартной articles:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { protected $table = 'blog_posts'; } ?>

Теперь все запросы к модели Article будут работать с таблицей blog_posts:

<?php use AppModelsArticle; $res = Article::where('status', 'published')->get(); foreach ($res as $article) { echo $article->title; } ?>

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

["article 1", "article 2", "article 3"]

Как видно из примера, модель работает с таблицей blog_posts, хотя имя модели Article предполагает использование таблицы articles.

Пример

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

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Article extends Model { protected $table; public function __construct(array $attributes = [], $table = 'articles') { $this->table = $table; parent::__construct($attributes); } } ?>

Тогда при создании экземпляра модели можно указать нужную таблицу:

<?php use AppModelsArticle; $res = (new Article([], 'articles_archive'))->get(); foreach ($res as $article) { echo $article->title; } ?>

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

["archive article 1", "archive article 2"]

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

Пример

Атрибут table также полезен для связей с таблицами, имеющими префиксы. Допустим, у нас есть модель Category и таблица product_categories:

<?php namespace AppModels; use IlluminateDatabaseEloquentModel; class Category extends Model { protected $table = 'product_categories'; public function articles() { return $this->hasMany(Article::class); } } ?>

Теперь мы можем получить статьи, принадлежащие определенной категории, несмотря на нестандартное имя таблицы:

<?php use AppModelsCategory; $res = Category::with('articles')->get(); foreach ($res as $category) { echo $category->name . ': '; echo $category->articles->count(); } ?>

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

["Technology: 5", "Science: 3", "Art: 4"]

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

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