«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > **Наследование одной таблицы или наследование нескольких таблиц с помощью Eloquent: что подходит для вашего приложения Laravel?**

**Наследование одной таблицы или наследование нескольких таблиц с помощью Eloquent: что подходит для вашего приложения Laravel?**

Опубликовано 15 ноября 2024 г.
Просматривать:159

**Single Table Inheritance vs. Multi Table Inheritance with Eloquent: Which is Right for Your Laravel Application?**

Реализация наследования одной таблицы с помощью Laravel Eloquent

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

Наследование одной таблицы

Хотя концептуально проще, одна таблица Наследование требует хранения всех столбцов всех типов в одной таблице, что приводит к потенциальному увеличению числа значений NULL. Это может повлиять на производительность базы данных, особенно с большими наборами данных.

Наследование нескольких таблиц с помощью Eloquent

Наследование нескольких таблиц предполагает разделение одной таблицы на несколько таблиц, каждая из которых соответствует конкретный тип модели. Фреймворк Laravel Eloquent предлагает полиморфные отношения для беспрепятственного управления этими отношениями.

Модель сообщения

Базовый класс для всех типов сообщений, Post, представляет общие столбцы и определяет публикуемый объект. полиморфные отношения:

class Post extends Eloquent {
    public function postable() {
        return $this->morphTo();
    }
}

Модели вопросов/статей

Каждый конкретный тип сообщения, например вопрос или статья, является продолжением сообщения и определяет связь morphOne с базовой моделью:

class Question extends Post {
    public function post() {
        return $this->morphOne('Post', 'postable');
    }
}

Примеры использования

  • Получить все сообщения: $posts = Post::all();
  • Получить все вопросы: $questions = Вопрос::all();
  • Получить столбец, посвященный конкретному вопросу, из сообщения: $question_column = $post->postable- >question_column;
  • Проверить тип сообщения: echo 'Type: '.get_class($post->postable);

Создание нового вопроса

Для создания нового вопроса необходимо связать его с таблицей сообщений для поддержки многотабличного наследования:

$post = new Post();
$post->shared_column = 'New Question Post';
$post->save();

$question = new Question();
$question->question_column = 'My Question';
$question->save();

$question->post()->save($post);

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

Подробные руководства по многотабличному наследованию в Laravel см. в ресурсах, представленных в исходном ответе на вопрос.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3