2015-07-26 3 views
0

У меня есть изображения модели с соотношением:yii2: получить записи по идентификатору отношений

public function getAlbums() 
{ 
    return $this->hasMany(ImagesTerms::className(), ['id' => 'term_id']) 
       ->viaTable(ImagesTermsRelations::tableName(), ['object_id' => 'id']) 
       ->andWhere(['type'=>'album']); 
} 

На странице просмотра изображения я хочу показать случайные изображения с одинаковыми альбомами. Может ли кто-нибудь помочь?

Я попытался с помощью следующего запроса, но он не дал мне то, что я хочу:

$related = Images::find()->with([ 
     'albums' => function($query) { 
      $query->andWhere(['in', 'id', [2]]); 
     } 
])->where(['status'=>'1'])->orderBy('rand()')->limit(9)->all(); 

Этот запрос исключает другие альбомы, но не изображения. Отображаются изображения с другими альбомами, но без метки альбома.

ответ

0

Я решил проблему:

$related = Images::find()->joinWith([ 
    'albums' => function($query) { 
     $query->andWhere(['in', 'images_terms.id', [1,2,3]); 
    } 
])->where(['images.status'=>'1'])->orderBy('rand()')->limit(9)->all(); 
Смежные вопросы