Добрый день. Хочу разобраться, но пока не получилось.
Есть две таблицы:
Posts - id, name, content
Postsmeta - id, posts_id, mkey, mvalue
postsmeta должна хранить теги, категории, картинки, ну вообщем что угодно, например
1,1,category,Первая категория
2,1,tag, Тэг
Соответственно в модели posts я пишу связь
public function getMeta() {
return $this->hasMany(Postsmeta::className(), ['posts_id' => 'id']);
}
В модели Postsmeta связь пока не добавляю.
Получилось сделать вот таким способом:
$model = \app\models\Posts::find()
->select([
'name',
'category' => 'postsmeta.mvalue',
])
->joinWith('meta')
->where(['postsmeta.mkey'=>'category'])
->andWhere(['postsmeta.mvalue'=>'cat 2'])
->asArray()
->all();
В ответе:
Array
(
[0] => Array
(
[name] => Статья 1
[category] => cat 2
[meta] => Array
( )
)
[1] => Array
(
[name] => Статья 2
[category] => cat 2
[meta] => Array
(
)
)
)
Но я уверен, что это не правильно.
+ как правильно передать в массив meta, все значение из таблицу postsmeta, а в идеале, может даже не во вложенный массив, а ключами в основной?