Реляционный запрос без использования отношений
Реляционный запрос без использования отношений
В некоторых случаях не нужно получать данные из связанной модели, как это можно указать?
Спасибо
Спасибо
Re: Реляционный запрос без использования отношений
не указывать отношение в with
Re: Реляционный запрос без использования отношений
Пробовал неуказывать и указывать пустое, все равно в отладочной информации видны запросы %)
Вернее там при условии указывалось with в CDbCriteria. В другом случае не указывалось.
Вернее там при условии указывалось with в CDbCriteria. В другом случае не указывалось.
Re: Реляционный запрос без использования отношений
значит идет lazy loading. Не нужно обращаться во вьюхе к релейшену
Re: Реляционный запрос без использования отношений
Я вьюху еще даже не вызываю, пока трейсом смотрю и отладочную информацию.
Re: Реляционный запрос без использования отношений
В экшене это, вызова вьюхи нет.
Пробовал даже явно прописать, чтобы только id получало.
Допольнительные запросы идут при вызове
$models=Game::model()->findAll($criteria);
Пробовал даже явно прописать, чтобы только 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);
Re: Реляционный запрос без использования отношений
значит срабатывает if(isset($_GET['tag']))
Re: Реляционный запрос без использования отношений
Нет, оно не трейсится
+ даже удалил этот блок и все равно
+ даже удалил этот блок и все равно
Код: Выделить всё
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: Реляционный запрос без использования отношений
http://yiiframework.ru/doc/guide/ru/database.arr см. «Реляционный запрос без получения связанных моделей»
Нравится Yii? Давайте сделаем его лучше!.
Re: Реляционный запрос без использования отношений
Читал, насколько я понял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: Реляционный запрос без использования отношений
Смотря к чему $criteria применяется.
Нравится Yii? Давайте сделаем его лучше!.
Re: Реляционный запрос без использования отношений
Game::model
Или имеется в виду что-то другое?
Или имеется в виду что-то другое?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Реляционный запрос без использования отношений
Ну, вроде верно. Попробуйте для начала без всех этих if попробовать.
Нравится Yii? Давайте сделаем его лучше!.
Re: Реляционный запрос без использования отношений
Пробовал (
Оставил в экшене только
Выводит
Оставил в экшене только
Код: Выделить всё
$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: Реляционный запрос без использования отношений
Хм, а где тут вообще данные для основной модели Game?
Нравится Yii? Давайте сделаем его лучше!.
Re: Реляционный запрос без использования отношений
В критерии?
Убрал пока, вернет все записи.
Или так нельзя?
Убрал пока, вернет все записи.
Или так нельзя?
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: Реляционный запрос без использования отношений
Нет, я про SQL. Тут выбираются теги из gp_tag и джойнятся с gp_game_tag. Данные из game не выбираются, что странновато.
Нравится Yii? Давайте сделаем его лучше!.
Re: Реляционный запрос без использования отношений
Выбираются, просто это нормально и я не приводил запрос
Код: Выделить всё
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`) )
Re: Реляционный запрос без использования отношений
ну так это 2 разных запроса.
А нету случайно defaultScope или поведения какого? или может где то ещё раньше теги выбираются
А нету случайно defaultScope или поведения какого? или может где то ещё раньше теги выбираются