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

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

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

#1 User is offline   AndrewWB 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 18-May 09
  • Location:Ukraine, Kiev

Posted 18 May 2009 - 04:36 PM

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% есть там данные и они нормлаьно связаны
0

#2 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 19 May 2009 - 02:01 AM

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

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

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

#3 User is offline   AndrewWB 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 18-May 09
  • Location:Ukraine, Kiev

Posted 19 May 2009 - 02:27 AM

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

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

$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;


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

#4 User is offline   speedster 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 23
  • Joined: 10-February 09

Posted 19 May 2009 - 02:58 AM

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

#5 User is offline   AndrewWB 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 18-May 09
  • Location:Ukraine, Kiev

Posted 19 May 2009 - 03:10 AM

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

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 ставит? Что-то я не совсем догоню...

0

#6 User is offline   AndrewWB 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 18-May 09
  • Location:Ukraine, Kiev

Posted 19 May 2009 - 03:34 AM

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

#7 User is offline   AndrewWB 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 18-May 09
  • Location:Ukraine, Kiev

Posted 19 May 2009 - 04:04 AM

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

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')



0

#8 User is offline   AndrewWB 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 18-May 09
  • Location:Ukraine, Kiev

Posted 20 May 2009 - 04:26 AM

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

#9 User is offline   Zolter 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 377
  • Joined: 26-March 09

Posted 20 May 2009 - 07:19 AM

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

#10 User is offline   SkyNet 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 3
  • Joined: 21-May 09

Posted 21 May 2009 - 08:31 AM

согласен

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

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

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

#11 User is offline   tyvon 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 22-December 08
  • Location:Ukraine

Posted 21 May 2009 - 09:48 AM

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


        $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
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users