Модель CakePHP Отношения без обращения к Рекурсивному - PullRequest
0 голосов
/ 02 сентября 2011

Я новичок в cakePHP, и у меня возникают проблемы с корректной связью всех моих моделей.

Это макет моих моделей в cakePHP:

Класс принадлежит к местоположению
Класс принадлежит к типу класса
Класс hasMany ScheduledClass
Класс запланированного класса принадлежит инструктору

Мойпроблема в том, что когда я использую:

$this->Class->find('all')

, я получаю данные только из моделей Class, Location, ClassType и ScheduledClass.Я не получаю никаких данных от модели Инструктора.

Я могу установить рекурсивное значение '2' и получить данные из модели Instructor, но это приводит к огромному количеству запросов (по одному на каждую строку) вместо объединения в "ScheduledClass.instructor_id ="Instructor.id ".

То, что я надеялся получить, выглядит примерно так:

SELECT
...
...
FROM classes as Class
INNER JOIN locations as Location on Class.location_id = Location.id
INNER JOIN class_types as ClassType on Class.class_type_id = ClassType.id
INNER JOIN scheduled_classes as ScheduledClass on ScheduledClass.class_id = Class.id
INNER JOIN instructors as Instructor on ScheduledClass.instructor_id = Instructor.id

Я пытался использовать и Containable, и Joins для получения нужных данных, но я не былне могу заставить их работать (возможно, из-за моего неправильного понимания их использования).

Заранее спасибо!

1 Ответ

0 голосов
/ 02 сентября 2011

используйте Containable и задайте, как вы хотите, чтобы поиск реагировал и получал те данные, которые вы хотите.

в модели

var $actsAs = array('Containable');

и в контроллере вы можете сделать что-то вроде этого

$this->data = $this->User->find('first', array('conditions' => array('User.id' => $this->Auth->user('id')), 'contain' => array('City', 'Region', 'Country', 'UserOccupations', 'UserGroup')));

Если у вас установлены правильные отношения Модель / Базы данных, вы можете получить точные данные, которые вы хотите, даже выбрав столбцы, которые вы хотите извлечь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...