Всем привет!
Начал изучать 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']);
}
Может подскажете, где тут ошибка?