Реляционный запрос без использования отношений

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Реляционный запрос без использования отношений

Сообщение andrew911 »

В некоторых случаях не нужно получать данные из связанной модели, как это можно указать?

Спасибо
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Реляционный запрос без использования отношений

Сообщение rak »

не указывать отношение в with
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Реляционный запрос без использования отношений

Сообщение andrew911 »

Пробовал неуказывать и указывать пустое, все равно в отладочной информации видны запросы %)
Вернее там при условии указывалось with в CDbCriteria. В другом случае не указывалось.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Реляционный запрос без использования отношений

Сообщение rak »

значит идет lazy loading. Не нужно обращаться во вьюхе к релейшену
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Реляционный запрос без использования отношений

Сообщение andrew911 »

Я вьюху еще даже не вызываю, пока трейсом смотрю и отладочную информацию.
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Реляционный запрос без использования отношений

Сообщение andrew911 »

В экшене это, вызова вьюхи нет.
Пробовал даже явно прописать, чтобы только id получало.
Допольнительные запросы идут при вызове
$models=Game::model()->findAll($criteria);

Код: Выделить всё

       $criteria = new CDbCriteria();
        
        if(isset($_GET['tag']))
        {
            $tag=substr(trim($_GET['tag']), 0, 250);
            preg_match("/^[a-zA-Z0-9\-\_]+$/", $tag);  
            
            
            $criteria->together=true;
            $criteria->with='tags';
            $criteria->condition='tags.id=1';
        } 
        else
        {
            //$criteria->with=array('tags'=>array('select'=>false));
            $criteria->select = 'id';
        }
        
        $criteria->order='t.id DESC';        
        
        
        $pages = new CPagination(Game::model()->count($criteria));
        $pages->pageSize=2;
        $pages->applyLimit($criteria);
        
        $models=Game::model()->findAll($criteria);   
 
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Реляционный запрос без использования отношений

Сообщение rak »

значит срабатывает if(isset($_GET['tag']))
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Реляционный запрос без использования отношений

Сообщение andrew911 »

Нет, оно не трейсится
+ даже удалил этот блок и все равно

Код: Выделить всё

system.db.CDbCommand.query(SELECT `tags`.`id` AS `t1_c0`, `tags`.`name` AS `t1_c1`, `tags`.`alias` AS `t1_c2`, `tags`.`frequency` AS `t1_c3` FROM `gp_tag` `tags` INNER JOIN `gp_game_tag` `tags_tags` ON (`tags_tags`.`game_id`=:ypl0) AND (`tags`.`id`=`tags_tags`.`tag_id`). Bound with :ypl0='4')
system.db.CDbCommand.query(SELECT `tags`.`id` AS `t1_c0`, `tags`.`name` AS `t1_c1`, `tags`.`alias` AS `t1_c2`, `tags`.`frequency` AS `t1_c3` FROM `gp_tag` `tags` INNER JOIN `gp_game_tag` `tags_tags` ON (`tags_tags`.`game_id`=:ypl0) AND (`tags`.`id`=`tags_tags`.`tag_id`). Bound with :ypl0='5') 
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Реляционный запрос без использования отношений

Сообщение samdark »

http://yiiframework.ru/doc/guide/ru/database.arr см. «Реляционный запрос без получения связанных моделей»
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Реляционный запрос без использования отношений

Сообщение andrew911 »

Sam Dark писал(а):http://yiiframework.ru/doc/guide/ru/database.arr см. «Реляционный запрос без получения связанных моделей»
Читал, насколько я понял
$criteria->with=array('tags'=>array('select'=>false));

должно было помочь (но не помогло), или что-то недопонял?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Реляционный запрос без использования отношений

Сообщение samdark »

Смотря к чему $criteria применяется.
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Реляционный запрос без использования отношений

Сообщение andrew911 »

Game::model

Или имеется в виду что-то другое?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Реляционный запрос без использования отношений

Сообщение samdark »

Ну, вроде верно. Попробуйте для начала без всех этих if попробовать.
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Реляционный запрос без использования отношений

Сообщение andrew911 »

Пробовал (
Оставил в экшене только

Код: Выделить всё

        $criteria = new CDbCriteria();
        $criteria->with=array('tags'=>array('select'=>false));

        $models=Game::model()->findAll($criteria); 
Выводит

Код: Выделить всё

....
system.db.CDbCommand.query(SELECT `tags`.`id` AS `t1_c0`, `tags`.`name` AS `t1_c1`, `tags`.`alias` AS `t1_c2`, `tags`.`frequency` AS `t1_c3` FROM `gp_tag` `tags` INNER JOIN `gp_game_tag` `tags_tags` ON (`tags_tags`.`game_id`=:ypl0) AND (`tags`.`id`=`tags_tags`.`tag_id`). Bound with :ypl0='1')
...  
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Реляционный запрос без использования отношений

Сообщение samdark »

Хм, а где тут вообще данные для основной модели Game?
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Реляционный запрос без использования отношений

Сообщение andrew911 »

В критерии?
Убрал пока, вернет все записи.
Или так нельзя?
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Реляционный запрос без использования отношений

Сообщение samdark »

Нет, я про SQL. Тут выбираются теги из gp_tag и джойнятся с gp_game_tag. Данные из game не выбираются, что странновато.
andrew911
Сообщения: 60
Зарегистрирован: 2011.05.30, 23:45

Re: Реляционный запрос без использования отношений

Сообщение andrew911 »

Выбираются, просто это нормально и я не приводил запрос

Код: Выделить всё

system.db.CDbCommand.query(SELECT `t`.`id` AS `t0_c0`, `t`.`title` AS `t0_c1` FROM `gp_game` `t` LEFT OUTER JOIN `gp_game_tag` `tags_tags` ON (`t`.`id`=`tags_tags`.`game_id`) LEFT OUTER JOIN `gp_tag` `tags` ON (`tags`.`id`=`tags_tags`.`tag_id`) ) 
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Реляционный запрос без использования отношений

Сообщение rak »

ну так это 2 разных запроса.
А нету случайно defaultScope или поведения какого? или может где то ещё раньше теги выбираются
Ответить