Один ко многим в ActiveRecord и условие в CDbCriteria?

Две модели:
class Model1 extends CActiveRecord {
    function relations() {
        return array(
            'Model2' => array(self::HAS_MANY, 'Model2', 'model1_id')
        )
    }
  }

  class Model2 extends CActiveRecord {
    public $foo;
    function relations() {
        return array(
            'Model1' => array(self::BELONGS_TO, 'Model1', 'model1_id')
        )
    }
  }



Поиск модели по условию:
$criteria->with = array('Model2');
  $criteria->addCondition("Model2.foo = 'bar'");
  Model1::model()->findAll($criteria);



В результате:
Unknown column 'Model2.foo' in 'where clause'.<br/>



Так и должно происходить? Позволяет ли HAS_MANY такой код? Если нет — как найти все Model1, которые имеют Model2 с foo = 'bar'?
  • Вопрос задан
  • 5952 просмотра
Решения вопроса 1
megahertz
@megahertz
full stack разработчик
Лучше бы полный SQL запрос увидеть. Сейчас я вижу 2 возможные причины:
— происходит ленивая загрузка, не хватает $criteria->together = true;
— поля foo нет в таблице Model2
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
rakot
@rakot
Меня смущает public $foo; в определении Model2, зачем он там?
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
$criteria->addCondition(«Model2.foo = 'bar'»);

У вас таблица Model2 будет с другим алисасом. Решением этой проблемы может быть как выславление у критерии together в true, так и просто посмотреть какой алиас назначается таблице.

В Yii2 вроде как добавили плюшку для того что бы Yii сам в суловия алиасы нужные подставлял.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы