Список форумов Cake-PHP.ru Cake-PHP.ru
Форум программистов CakePHP
(на сайт)
 
 Watched TopicsWatched Topics   FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Как find() формирует массив?

 
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий
Предыдущая тема :: Следующая тема  
Автор Сообщение
mayar

цитировать



Зарегистрирован: 03 Апр 2009 15:52:14
Сообщения: 24

СообщениеДобавлено: 20 Авг 2009 15:51:26    Заголовок сообщения: Как find() формирует массив? Ответить с цитатой

Уважаемые специалисты, подксажите мне неразумному. Как происходит комбинирование цельного массива из нескольких SQL-запрософ, порождаемых сложным find() ?

Например, имеем вот такой find():

Код:

$this->Site->find(
                'all',
                array (
                    'fields'    => array('Site.id'),
                    'conditions' => array('Site.site' => '3333'),
                    'contain' => array (
                        'Job' => array(
                            'fields' => array ('Job.site_id'),
                                'conditions' => array ('Job.site_id' => 3),
                                'JobComment' => array (
                                    'fields' => array ('JobComment.comment'),
                                    'conditions' => array ('JobComment.trouble' => 1)
                                )
                    )
                    )
                )
            )


Он делает вот такие запросы:

Код:

1   SELECT `Site`.`id` FROM `sites` AS `Site` WHERE `Site`.`site` = '3333'
2   SELECT `Job`.`site_id`, `Job`.`id` FROM `jobs` AS `Job` WHERE `Job`.`site_id` = (3)
3   SELECT `JobComment`.`comment`, `JobComment`.`id`, `JobComment`.`job_id` FROM `job_comments` AS `JobComment` WHERE `JobComment`.`trouble` = 1 AND `JobComment`.`job_id` IN (3, 5, 10, 11, 15)


В результате получаем 3 таблички:
Код:

Sites:
-------
id
3

Jobs:
------
site_id   id
3   3
3   5
3   10
3   11
3   15

job_comments:
------------------
comment   id   job_id
aaaaaaa    1   10
bbbbbbb   3   10
cccccccc   4   3


Каким образом после этого мы получаем вот такой массив:

Код:

Array
(
    [0] => Array
        (
            [Site] => Array
                (
                    [id] => 3
                )
            [Job] => Array
                (
                    [0] => Array
                        (
                            [site_id] => 3
                            [id] => 3
                            [JobComment] => Array
                                (
                                    [0] => Array
                                        (
                                            [comment] => aaaaaaa
                                            [id] => 4
                                            [job_id] => 3
                                        )
                                )
                        )
                    [1] => Array
                        (
                            [site_id] => 3
                            [id] => 5
                            [JobComment] => Array
                                (
                                )
                        )
                    [2] => Array
                        (
                            [site_id] => 3
                            [id] => 10
                            [JobComment] => Array
                                (
                                    [0] => Array
                                        (
                                            [comment] => bbbbbb
                                            [id] => 1
                                            [job_id] => 10
                                        )

                                    [1] => Array
                                        (
                                            [comment] => ccccccc
                                            [id] => 3
                                            [job_id] => 10
                                        )
                                )
                        )
                    [3] => Array
                        (
                            [site_id] => 3
                            [id] => 11
                            [JobComment] => Array
                                (
                                )
                        )

                    [4] => Array
                        (
                            [site_id] => 3
                            [id] => 15
                            [JobComment] => Array
                                (
                                )
                        )
                )
        )
)



Как?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
michas

цитировать



Зарегистрирован: 28 Янв 2008 11:28:31
Сообщения: 123

СообщениеДобавлено: 20 Авг 2009 19:22:31    Заголовок сообщения: Ответить с цитатой

Из-за связей и recursive
_________________
Все самое интересное в реальном времени - xmpp:cakephp@conference.jabber.ru
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
mayar

цитировать



Зарегистрирован: 03 Апр 2009 15:52:14
Сообщения: 24

СообщениеДобавлено: 21 Авг 2009 10:58:17    Заголовок сообщения: Ответить с цитатой

Да это ясно... мне интересно, как из 3х таблиц методами PHP получить такой вот массив, как я в конце привел.

Есть 3 массива: Sites, Jobs, Job_comments
Как их комбинировать в один большой массив?

Set::combine, Set::insert ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Имя
Сообщение

Смайлики
Very Happy Smile Sad Surprised
Shocked Confused Cool Laughing
Mad Razz Embarassed Crying or Very sad
Evil or Very Mad Twisted Evil Rolling Eyes Wink
Exclamation Question Idea Arrow
Дополнительные смайлики

 
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Cake-PHP.ru -> Общий Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы можете начинать темы
Вы можете отвечать на сообщения
Вы можете редактировать свои сообщения
Вы можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Рейтинг@Mail.ru