Проблема с реляционным запросом в Yii2

Рейтинг: 2Ответов: 1Опубликовано: 23.11.2014

Здравствуйте.

Поступила задача вывести голосование и все варианты ответов. Я пытаюсь сделать такой запрос:

$model = app\models\Reports::find()->where(['id'=>$model->id])->joinWith('reportData')->one();

Код реляционного запроса:

public function getReportData(){
    return $this->hasMany(ReportsData::className(), ['report_id'=>'id'])->where(['can_take'=>1]);
}

Однако когда выполняется запрос №1($model = ...), получаю ошибку вида:

Integrity constraint violation – yii\db\IntegrityException
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous
The SQL being executed was: SELECT `tb_reports`.* FROM `tb_reports` LEFT JOIN `tb_reports_data` ON `tb_reports`.`id` = `tb_reports_data`.`report_id` WHERE (`id`=1) AND (`can_take`=1)

Error Info: Array
(
    [0] => 23000
    [1] => 1052
    [2] => Column 'id' in where clause is ambiguous
)

↵
Caused by: PDOException
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'id' in where clause is ambiguous

in /var/www/yii2/vendor/yiisoft/yii2/db/Command.php at line 819

Подскажите, пожалуйста, что делать и в какую сторону копать?

Ответы

▲ 1

А как у вас так получается, что "$model =", а внутри атрибут "$model->id"? Разберитесь, что именно у вас в переменной $model. А вообще, чтобы упростить выражение, попробуйте сделать так:

$model = Reports::findByPk($other_model->id)->joinWith('report_data')->one();

UPD. Исправил joinWith('reportData') на joinWith('report_data').