Соединение столов в Cakephp - PullRequest
0 голосов
/ 11 апреля 2011

Я изучаю cakePHP и пытаюсь заставить работать, но не получается.Любая помощь приветствуется!Ситуация: у меня есть одна таблица пользователей и одна таблица временных интервалов.Каждый временной интервал настроен для пользователей hasMany (временный интервал предназначен для встречи двух пользователей):

var $hasMany = array(
 'Partner' => array(
  'className' => 'User',
  'foreignKey' => 'id'
 ),
'Student' => array(
  'className' => 'User',
  'foreignKey' => 'id'
 )
);

Итак, я хочу загрузить временной интервал и присоединиться к таблице пользователей, чтобы заполнить ктоПартнер »и кто такой« Студент ».Прямо сейчас у меня настроено соединение следующим образом (для студента):

    $params = array(
        'joins' => array(
            array(
                'table' => 'users',
                'alias' => 'User',
                'type' => 'LEFT',
                'conditions' => array(
                    'User.id = Timeslot.student_id',
                )
            )
        )
    );
    $this->set('timeslots', $this->Timeslot->find('all', $params)); 

В моей переменной временных интервалов, когда я добираюсь до представления, у меня есть массив для Partner и массив для Student, так какв ассоциацию $ hasMany.Но я не могу понять, как правильно загрузить эти переменные!

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 11 апреля 2011

добро пожаловать в CakePHP!

Похоже, ваши отношения установлены неправильно.Согласно вашему описанию, у временного интервала будет один участник и один студент.Таким образом, отношения, которые должны быть определены, принадлежат.Ваша таблица временного интервала должна иметь два внешних ключа: partner_id и student_id.Затем в вашей модели временного интервала объявите:

var $belongsTo = array(
    'Partner' => array(
        'className' => 'User',
        'foreignKey' => 'partner_id'
    ),
    'Student' => array(
        'className' => 'User',
        'foreignKey' => 'student_id'
    )
);

В результате вызов $ $--> Timeslot-> find () должен вызвать что-то вроде:

array(
    0 => array(
        'Timeslot' => array(...),
        'Partner' => array(...),
        'Student' => array(...)
    ),
    1 => array(
        'Timeslot' => array(...),
        'Partner' => array(...),
        'Student' => array(...)
    ),
    ...
)

Это то, чтоты пытаешься добраться до?

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