Yii Framework 2.0 Active Record

Я работаю с Yii Framework 2.0, у меня есть одна таблица базы данных, которая выглядит следующим образом.

id   active   key
1   0        xx
2   1        xx
3   0        zzz
4   0        wwww
5   1        wwww
6   1        qqqqq

Я хотел бы получить запись, где «active» равно 1, а «key» совпадает с «key» записи, где «active» равно 0. Результат, который я хочу получить,

 id   active   key
2   1        xx
5   1        wwww

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

$allModel = Model::find()->where(['active' => 0])->all();

$arrModelActive1 = [];

foreach($allModel as $model) {
$modelActive1 = Model::find()->where['active' => 1, 'key' => $model->key]->all();

$arrModelActive1[] = $modelActive1;
}

return $arrModelActive1;

Я мог бы подойти к этой проблеме с приведенным выше примером кода, но проблема в том, что я выполняю запрос внутри цикла foreach, что может снизить производительность. Поэтому я ищу решение для объединения или загрузки, которое может предоставить Yii 2.0, которое могло бы работать с той же таблицей или так называемой операцией самосоединения.

0

Решение

Пример:
Вы имеете отношение как public function getTest()
{
return $this->hasMany(self::className(), ['key' => 'key'])
->where('active = :active', [':active' => 1]);
}

и после этого вы должны выбрать элементы с активным полем == 0

$model = Model::find(['active' => 0])->all(); var_dump($model->test);
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]