Laravel красноречиво загружает две сводные таблицы

Я пытаюсь загрузить один атрибут, который объединен в группу, и другую таблицу с дополнительно связанной сводной точкой. Вот таблицы:

Categories
--------------------
id

Attributes
--------------------
id
attribute_set_id


Attribute_Groups
----------------------------
id


Categories_Attribute_Groups
-----------------------------
category_id
attribute_group_id


Categories_Additional_Attributes
-----------------------------
category_id
attribute_id


Class Category extends eloquent
{

    // how to achieve this
    public function attributes()
    {
        // all attributes that can be eager load
    }
}

Как я могу получить все атрибуты в модели категории с возможностью их загрузки?

Будьте осторожны при использовании attributes; вы можете видеть, что #attributes: array: ... [▶] доступен для всех моделей без определения отношения, поэтому попытка доступа к нему может вызвать проблемы.

Tim Lewis 19.06.2018 21:34
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
1
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В модели категорий вы можете определить 2 отношения как belongsToMany с атрибутом и группой атрибутов

Class Category extends eloquent
{

    public function attributes()
    {
        return $this->belongsToMany(Attribute::class, 'Categories_Additional_Attributes', 'category_id');
    }

    public function attribute_groups()
    {
        return $this->belongsToMany(AttributeGroups::class, 'Categories_Attribute_Groups', 'category_id');
    }
}

Теперь вы можете жаждать их как

Category::with(['attributes', 'attribute_groups'])->get();

Для двунаправленного отображения вы можете определить их как

Class Attribute extends eloquent
{

    public function categories()
    {
        return $this->belongsToMany(Category::class, 'Categories_Additional_Attributes', 'attribute_id');
    }
}

Class AttributeGroups extends eloquent
{

    public function categories()
    {
        return $this->belongsToMany(Category::class, 'Categories_Attribute_Groups', 'attribute_group_id');
    }
}

Мне нужны все атрибуты, а не только группа и дополнительные

Alireza Mirsepassi 19.06.2018 20:31

@AlirezaMirsepassi см. Часть with(...), у вас будут все атрибуты, связанные с этой конкретной категорией

M Khalid Junaid 19.06.2018 20:34

Другие вопросы по теме