Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
mayar
цитировать
Зарегистрирован: 03 Апр 2009 15:52:14 Сообщения: 24
|
Добавлено: 18 Авг 2009 08:53:13 Заголовок сообщения: FIND() или QUERY() |
|
|
Так уж повелось, что я использую в SQL-запросах "WHERE" вместо "JOIN". Это накладывает на мою работу с фреймворком некоторые неудобства.
А именно, я не знаю, как написать вот такой запрос:
SELECT j.id, jc.comment FROM jobs j, sites s, job_comments jc WHERE s.id = j.site_id AND j.id = jc.job_id AND s.site = '3333' AND jc.trouble = 1 с помощью "JOIN"
И тем более, у меня не получается написать правильный FIND. Ни conditions + contain, ни что другое не помогло.
Вот и приходится использовать $this->Model->query($query), а ведь хочется использовать методы фреймворка по-максимуму.
Есть ли какой-либо выйгрыш в производительности между find() и query()? |
|
Вернуться к началу |
|
|
mayar
цитировать
Зарегистрирован: 03 Апр 2009 15:52:14 Сообщения: 24
|
Добавлено: 19 Авг 2009 09:08:46 Заголовок сообщения: |
|
|
Возможно я не очень понятно объяснил суть проблемы:
Мне это нужно с
помощью FIND описать. В этом-то и был смысл темы.
В запросе FIND мы ведь можем обратиться только к 1 модельке:
Код: | $this->Site->Job->find('all', array(
'recursive' => 2,
'conditions' => array('Job.site_id' => 3),
'contain' => array(
'JobComment' => array(
'conditions' => array(
'JobComment.trouble'=>1))))) |
Как через FIND указать "WHERE Site.site = '3333' AND
JobComment.trouble = 1" ?
У меня получается через FIND только вот такой запрос составлять:
Код: |
SELECT * FROM `jobs` AS `j`
INNER JOIN `sites` AS `s`
ON (`s`.`id` = `j`.`site_id` AND `j`.`site_id` = 3)
LEFT JOIN `job_comments` AS `jc`
ON (`jc`.`job_id` = `j`.`id` AND `jc`.`trouble` = 1);
|
|
|
Вернуться к началу |
|
|
michas
цитировать
Зарегистрирован: 28 Янв 2008 11:28:31 Сообщения: 123
|
Добавлено: 19 Авг 2009 22:07:34 Заголовок сообщения: |
|
|
Рекурсив в попу. Делайте все контейном[/code] _________________ Все самое интересное в реальном времени - xmpp:cakephp@conference.jabber.ru |
|
Вернуться к началу |
|
|
mayar
цитировать
Зарегистрирован: 03 Апр 2009 15:52:14 Сообщения: 24
|
Добавлено: 20 Авг 2009 13:54:37 Заголовок сообщения: |
|
|
Ну вот третий день уже пытаюсь сделать и так и сяк и Set::extract, combine и т.д. И join'ы пробовал и т.п.
Ничего не выходит...
Получается тупой массив:
Код: |
Array
(
[0] => Array
(
[Job] => Array
(
[id] => 10
[date] => 2009-08-13 00:00:00
)
[JobComment] => Array
(
[comment] => tr1
)
)
[1] => Array
(
[Job] => Array
(
[id] => 10
[date] => 2009-08-13 00:00:00
)
[JobComment] => Array
(
[comment] => tr2
)
)
[2] => Array
(
[Job] => Array
(
[id] => 3
[date] => 2009-08-17 00:00:00
)
[JobComment] => Array
(
[comment] => tr3
)
)
)
|
А мне нужно:
Код: |
Array
(
[0] => Array
(
[Job] => Array
(
[id] => 10
[date] => 2009-08-13 00:00:00
)
[JobComment] => Array
(
[0] => Array (
[comment] => tr1
)
[1] => Array (
[comment] => tr2
)
)
)
[1] => Array
(
[Job] => Array
(
[id] => 3
[date] => 2009-08-17 00:00:00
)
[JobComment] => Array
(
[0] => Array (
[comment] => tr3
)
)
)
)
|
Уже мозга за мозгу заезжает |
|
Вернуться к началу |
|
|
mayar
цитировать
Зарегистрирован: 03 Апр 2009 15:52:14 Сообщения: 24
|
Добавлено: 20 Авг 2009 16:29:59 Заголовок сообщения: |
|
|
Вроде получилось.
Решение:
Код: | $data = $this->Site->Job->find(
'all',
array (
'recursive' => 1,
'fields' => array('DISTINCT Job.date'),
'conditions' => array('Job.site_id' => 3),
'contain' => array (
'JobComment' => array(
'fields' => array (
'JobComment.comment',
'JobComment.created',
'JobComment.whois'),
'conditions' => array ('JobComment.trouble' => 1)
)
),
'joins' => array(
array(
'table' => 'job_comments',
'alias' => 'JobComment',
'type' => 'INNER',
'foreignKey' => false,
'conditions'=> array(
'JobComment.job_id = Job.id',
'JobComment.trouble = 1'
)
)
)
)); |
|
|
Вернуться к началу |
|
|
sinoptik
цитировать
Зарегистрирован: 20 Авг 2009 16:29:34 Сообщения: 10
|
Добавлено: 16 Сен 2009 16:49:29 Заголовок сообщения: |
|
|
'contain' Что это за деректива такая у меня она вообще не обробатывается. |
|
Вернуться к началу |
|
|
mayar
цитировать
Зарегистрирован: 03 Апр 2009 15:52:14 Сообщения: 24
|
Добавлено: 20 Сен 2009 17:01:43 Заголовок сообщения: |
|
|
Это behavior такой. Почитай: http://habrahabr.ru/blogs/php/38675/ |
|
Вернуться к началу |
|
|
|