Я работаю с 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, которое могло бы работать с той же таблицей или так называемой операцией самосоединения.
Пример:
Вы имеете отношение как 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);
Других решений пока нет …