Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
Watched Topics
FAQ
Поиск
Пользователи
Группы
Регистрация
Профиль
Войти и проверить личные сообщения
Вход
Список форумов Cake-PHP.ru
->
Общий
Ответить
Имя
Тема
Сообщение
Смайлики
Дополнительные смайлики
Цвет шрифта:
По умолчанию
Тёмно-красный
Красный
Оранжевый
Коричневый
Жёлтый
Зелёный
Оливковый
Голубой
Синий
Тёмно-синий
Индиго
Фиолетовый
Белый
Чёрный
Размер шрифта:
Размер шрифта
Очень маленький
Маленький
Обычный
Большой
Огромный
Закрыть теги
[quote="mayar"]Так уж повелось, что я использую в SQL-запросах "WHERE" вместо "JOIN". Это накладывает на мою работу с фреймворком некоторые неудобства. А именно, я не знаю, как написать вот такой запрос: [i]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[/i] с помощью "JOIN" И тем более, у меня не получается написать правильный FIND. Ни conditions + contain, ни что другое не помогло. Вот и приходится использовать $this->Model->query($query), а ведь хочется использовать методы фреймворка по-максимуму. Есть ли какой-либо выйгрыш в производительности между find() и query()?[/quote]
Настройки
HTML
ВЫКЛЮЧЕН
BBCode
ВКЛЮЧЕН
Смайлики
ВКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Отключить в этом сообщении смайлики
Если у вас плохое зрение или вы не можете прочесть этот код по какой-то другой причине, то обратитесь за помощью к
Администратору
.
Код подтверждения: *
Введите код в точности так, как вы его видите. Код является регистро-зависимым, а символ нуля имеет косую линию внутри цифры.
Часовой пояс: GMT + 3
Перейти:
Выберите форум
CakePHP Форум
----------------
Общий
Установка и настройка
Творчество
Вопросы и пожелания
Комментарии к главам руководства по CakePHP 1.1
Обзор темы
Автор
Сообщение
mayar
Добавлено: 20 Сен 2009 17:01:43
Заголовок сообщения:
Это behavior такой. Почитай: http://habrahabr.ru/blogs/php/38675/
sinoptik
Добавлено: 16 Сен 2009 16:49:29
Заголовок сообщения:
'contain' Что это за деректива такая у меня она вообще не обробатывается.
mayar
Добавлено: 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'
)
)
)
));
mayar
Добавлено: 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
)
)
)
)
Уже мозга за мозгу заезжает
michas
Добавлено: 19 Авг 2009 22:07:34
Заголовок сообщения:
Рекурсив в попу. Делайте все контейном[/code]
mayar
Добавлено: 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);
mayar
Добавлено: 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()?
Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB
Если ничего интересного не нашли, можно рекламу почитать, а рекламируется у нас сегодня «».