Yii2. Связанные модели

У меня есть 3 модели: Items, Serials и SerialsCategories. Когда я показываю форму элемента (для создания или обновления), мне нужно показать сериалы, которые принадлежат идентификатору категории, выбранному на предыдущем шаге. Сериал может принадлежать более чем к одной категории.

Прямо сейчас у меня есть модель Item:

public function getSerialsTypeByCategory() {
        return (new SerialType)->getByCategory($this->itemCategoryId);
    }

В моей модели SerialType:

public function getByCategory($itemCategoryId) {

        return SerialTypeItemCategory::find()->select(['serialTypeId'])->where(['itemCategoryId' => $itemCategoryId])->all();

    }

Это работает, оно делает то, что мне нужно, но... Это правильный путь? Есть ли способ лучше?


person Eduardo    schedule 25.07.2016    source источник
comment
мне кажется правильным.. код находится в нужном месте (модель) и написан правильно (геттер)   -  person scaisEdge    schedule 25.07.2016


Ответы (1)


это не неправильно, что вы делаете. но есть еще кое-что - проверьте эту ссылку: Работает с реляционными данными

если вы используете ->hasOne и ->hasMany для определения отношений, ваша модель получает некоторые дополнительные преимущества, такие как объединение с ленивой или нетерпеливой загрузкой:

Item::findOne($id)->with(['categories'])->all();

с отношением вы также можете использовать ->link и ->unlink для добавления/удаления связанных данных, не задумываясь о связанных полях.

Кроме того, легко определить отношения с помощью таблицы соединений:

class Order extends ActiveRecord
{
    public function getItems()
    {
        return $this->hasMany(Item::className(), ['id' => 'item_id'])
            ->viaTable('order_item', ['order_id' => 'id']);
    }
}
person e-frank    schedule 25.07.2016
comment
Большое спасибо! Я буду изучать viaTable, впервые вижу его. - person Eduardo; 25.07.2016