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

Как объединить последовательность таблиц в yii2?

Всем привет!
Начал изучать yii2, по уроку создал дерево категорий в компоненте, в котором формируется ассоциативный массив.
Проблема в том, что url для категорий лежат в отдельной таблице.
Само обращение в компоненте:
$this->data = Category::find()->indexBy('id')->asArray()->all();

Класс Category:
class Category extends ActiveRecord
{
    public static function tableName()
    {
        return 'categories';
    }

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

Класс Product:
class Product extends ActiveRecord
{
    public static function tableName()
    {
        return 'products';
    }

    public function getCategory()
    {
        return $this->hasOne(Category::className(), ['id' => 'category_id']);
    }
}

Написал третий класс CategoriesUrl, в котором по идее должна происходить выборка и join в category, но не сильно понимаю, как это сделать:
class CategoriesUrl extends ActiveRecord
{
    public static function tableName()
    {
        return 'categories_url';
    }
}

Поле categories_url.category_id должно смотреть на categories.id.
Буду признателен за ответы/ссылки на мануалы.
UPD: join получился, но немного не так как хотелось бы. Мне необходимо было все в один массив добавить, а создался многомерный:
[А3] => Array
        (
            [id] => А3
            [name] => DVD и CD диски
            [description] => 
            [meta_keywords] => 
            [meta_description] => 
            [parent_id] => 
            [enabled] => 1
            [updated] => 2017-07-31 00:07:59
            [categoriesUrl] => Array
                (
                    [category_id] => А3
                    [url] => a3
                    [url_title] => dvd-i-cd-diski
                    [new] => 0
                    [description] => 
                    [meta_keywords] => 
                    [meta_description] => 
                    [product_name_template] => %name% - %sku%
                )

        )

Вот вызов:
$this->data = Category::find()->indexBy('id')->joinWith('categoriesUrl')->asArray()->all();

А вот сам метод getCategoriesUrl:
public function getCategoriesUrl()
    {
        return $this->hasOne(CategoriesUrl::className(), ['category_id' => 'id']);
    }

Может подскажете, где тут ошибка?
  • Вопрос задан
  • 151 просмотр
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

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