Задать вопрос
chelkaz
@chelkaz

Как упростить обработку получения общих данных?

В одной таблице категории.
Во второй элементы.
В третьей цвета для элементов.
Все они связаны.
Смысл показать в категории все цвета которые используют ее элементы.
Сейчас я получаю так.
$categories = Category::with('elements.colors')->get();

И уже во вбюхе их перебираю:
@foreach($category->elements as $element)
        {{$element->colors->code}}
@endforeach

Но вот тут и проблемы, мне нужно только разные цвета, а не все подряд. И второе, если будет у категории 1000 элементов, а на странице 100 категорий, что тогда? Как можно упростить, или у меня логика изначально не та?
У категории к элементам hasMany
У элементов к категории belongsTo
И к цветам у элементов belongsTo
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 2
qonand
@qonand
Software Engineer
Вы немного не правильно подходите к задаче - Вам нужно вывести уникальные значения цветов используемые в элементах категории, а значит Вам нужно создать в модели категорий реляцию которая будет доставать эти данные через связующую таблицу colors. На Yii это могло бы выглядеть приблизительно так:
class Category extends \yii\db\ActiveRecord{
// .....

    public function getElements(){
        return $this->hasMany(Element::className(), ['category_id' => 'id']);
    }

    public function getColors(){
        return $this->hasMany(Color::className(), ['id' => 'element_id'])
                   ->via('elements')->distinct();
    }
// ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы