2013-07-11 4 views
-1

HI Недавно я работаю с видом крупного проекта У меня есть 5 таблиц, с которыми нужно работать. Это мой сценарий Я хочу перечислить все сообщения в таблице сообщений и все комментарии к конкретному сообщению. у каждого комментария есть автор, поэтому мне тоже нужна информация. , чтобы сделать его легкоОбработка нескольких таблиц с большим количеством данных с помощью Cakephp

Сообщение 1

-> Сообщения Описания [Возьмите из сообщений таблицы]

-> Комментариев, относящиеся к сообщению 1 [Возьмите из комментариев таблицы, также POST_ID в качестве внешнего ключа]

-> Комментарии пользователей информация [Комментарий таблица user_id в качестве иностранного ключа]

сообщения 2

-> Сообщения Описания [Возьмите из сообщений таблицы]

-> Комментариев, относящиеся к сообщению 2 [Возьмите из комментариев таблицы, также POST_ID в качестве внешнего ключа]

-> Комментарии пользователей Информация [Комментарий таблицы user_id, как иностранные ключ]

.

.

.

сообщения {п}

-> Сообщения Описания [Возьмите из сообщений таблицы]

-> Комментариев, относящиеся к сообщению {п} [Возьмите из комментариев таблицы, также POST_ID как чужеродный ключ]

-> Комментарии пользователей информация [Комментарий таблица user_id в качестве иностранных ключа]

Предположим, у меня есть более 10000 постов в моей таблице

Может ли помогите мне работать с этим.

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

+0

Пожалуйста, покажите свой существующий запрос на поиск, соответствующее резюме журнала sql и укажите версию торта, который вы используете. – AD7six

ответ

0

если у вас есть ваш Model relations настроен правильно (я не буду вдаваться в подробности по этому вопросу, потому что книга CakePHP является отличным ссылка на вопрос), это относительно просто.

Чтобы иметь возможность получать данные Пользователя для каждого комментария, вы должны использовать Containable. Опять же, я не буду действительно объяснять, что он делает, потому что книга может сделать это лучше.

я обеспечиваю пример запроса ниже, но предупредил, что не может быть 100% правильно (особенно учитывая, что я не знаю, имена ваших колонок):

$data = $this->Post->find('all', array(
    'fields' => array('Post.description'), 
    'contains' => array(
     'Comments', 
     'Commenter' //Alias for the User Model 
    ) 
    )); 

Просто объяснений комментария выше: Это предполагает Comment hasOne Commenter => array('className' => 'User')

+0

Не будет ли это несколько эффективным, учитывая количество данных, которое хочет получить от запроса? Я думаю, если OP custom написал JOIN, они могли бы получить более высокую эффективность, но это было бы довольно сложно. – ahjohnston25

+0

Ну, что вы предлагаете сделать, это отличается от того, как торт работает по умолчанию? В качестве альтернативы вы можете подумать о менее эффективном способе сделать это :)? В любом случае, я дважды проверил и создавал бы 1 запрос для сообщений, 1 запрос для комментариев и один запрос ** за комментарий **, чтобы получить имя пользователя. Это лучше (возможно), чем я ожидал, но не оптимальный. Обратите внимание, что 1) ключ для сдерживаемого '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – AD7six

+0

[Вот пример, показывающий журнал запросов] (https://gist.github.com/AD7six/e84aa17eaa02f77ab79f) - это указывает на то, что количество запросов равно 2 + количеству комментариев. – AD7six

Смежные вопросы