CDbCriteria - не хочет джоин цеплять

http://www.yiiframew…ria#join-detail

$criteria=new CDbCriteria;


        $criteria->condition = 'main_page = 1 AND active = 1';


        $criteria->join  = "LEFT JOIN templates ON templates.mid = template_id 


                                                   AND templates.lang_id = '{$this->lang}' ";


        


        $criteria->select = 'pages.*, templates.file';


        


        return pages::model()->find($criteria);

основную запись выбирает с таблички pages, а вот templates - крепит (( хотя 100% есть там данные и они нормлаьно связаны

а грохни для начала

                                                  AND templates.lang_id = '{$this->lang}'

и посмотри результат. может сама проверка не идет

что-то ни в какую…

уже создал тестовые таблички простые

$criteria=new CDbCriteria;


        $criteria->condition = "a1.name = 'bla name'";


        $criteria->join  = "LEFT JOIN a2 ON a2.id = a1.test";


       


        $criteria->select = 'a1.*, a2.file';


       


        $result = a1::model()->find($criteria);


        echo $result->file;

таблички с тремя полями всего…  С первой таблички выбирает, а джоин такое ощущение, что вообще не цепляет… как можно посмотреть последний выполненный запрос?

В настройках к примеру пропиши CWebLogRouter и уровень логирования поставь trace у тебя все логи будут в браузер кидаться. Лучше всего конечно ман покурить по логам

установил дебагер… запрос нормально отработался…  Ммм… тогда остаётся загадкой почему не доступны данные с другой таблицы, связанные джоином?

Quote

Property "a1.file" is not defined.


Querying SQL: SELECT a1.*, a2.file FROM `a1` LEFT JOIN a2 ON a2.id = a1.test WHERE a1.name = 'bla name' LIMIT 1

Почему а1 ставит? Что-то я не совсем догоню…

блин, что-же столько сложностей чтобы сделать один простой запрос… Кто как соединяет таблички, если нужно вывести доп инфу лежащую в другой таблице?

указал связь в модели с первой таблицей

public function relations()


    {


        return array(


            'author'=>array(self::HAS_ONE, 'a2', 'id'),


        );


    }

вроде отработался запрос, но блин мокц плавится от такого запроса:

Querying SQL: SELECT `a1`.`id` AS t0_c0, `a1`.`test` AS t0_c1, `a1`.`name` AS t0_c2, t1.`id` AS t1_c0, t1.`name` AS t1_c1, t1.`file` AS t1_c2 FROM `a1` LEFT JOIN a2 ON a2.id = a1.test LEFT OUTER JOIN `a2` t1 ON (t1.`id`=`a1`.`id`) WHERE (a1.name = 'bla name')

мдя… походу никто ничем помочь не может… весело…

всё же переходить на работу с Уии стрёмно. Если тупо на такой мелочи возникают такие проблемы и решаться толком не решаются…

А в чем собственно возмущение? Yii сгенерировало вполне нормальный запрос относительно того  какую связь вы указали в relations. Просто AS связка к таблице идет после каждого элемента в не в начале один раз. На нагрузку уверен это некак не скажится.

согласен

сам убил пару часов на проблему, действительно нет фетча на тупо-джойновый запрос

вывод:

relations в модели могут быть избыточными, и это не значит что все джойны всегда будут в запросе

нужный джойн выполняется при вызове методом width() CActiveRecord при селекте

Я делал просто



        $criteria=new CDbCriteria;


        $criteria->condition = 'a1.field = ' . $val;


       


        $result = a1::model()->with(array('a2_rel'=>array('condition'=>'field=' . $val)))->find($criteria);


где 'a2_rel' - связь с таблицей a2 прописанная в моделе a1