CakePHP обнаружил, что не соблюдает ассоциацию

У меня возникла проблема с получением вызова model->find() для соблюдения созданной мной ассоциации ownTo.

Вот ассоциация:

var $belongsTo = array('User' => array('className'  =>'User',
                                       'foreignKey' => 'id',
                                   'fields'     => array('username')
                                       )
                      );

И вот вызов поиска:

$this->set('broadcasters_list', $this->Broadcaster->find('all',  
                                                         array('fields'=>array('id')
                                                         )));

Теперь об очень странной вещи; У меня есть вызов разбиения на страницы для модели Broadcaster, который при вызове учитывает ассоциацию ownTo и возвращает необходимую информацию из модели User.

береги себя, ли

Редактировать:

Я взглянул на построенный запрос, вот что у меня есть:

Для команды поиска:

SELECT `Broadcaster`.`id` FROM `broadcasters` AS `Broadcaster` LEFT JOIN `users` AS `User` ON (`Broadcaster`.`id` = `User`.`id`) LEFT JOIN `images` AS `profile_image` ON (`profile_image`.`user_id` = `Broadcaster`.`id` AND image_type = 3) WHERE 1 = 1 

Для вызова пагинации:

SELECT `Broadcaster`.`id`, `Broadcaster`.`key_id`, `Broadcaster`.`session_id`, `Broadcaster`.`broadcast_mode`, `Broadcaster`.`next_guest_id`, `Broadcaster`.`one_to_one_credits`, `Broadcaster`.`one_to_many_credits`, `Broadcaster`.`avilable_for_private`, `Broadcaster`.`connect_type`, `Broadcaster`.`commission`, `Broadcaster`.`credits`, `Broadcaster`.`enabled`, `User`.`username`, `profile_image`.`file_id` FROM `broadcasters` AS `Broadcaster` LEFT JOIN `users` AS `User` ON (`Broadcaster`.`id` = `User`.`id`) LEFT JOIN `images` AS `profile_image` ON (`profile_image`.`user_id` = `Broadcaster`.`id` AND image_type = 3) WHERE `enabled` = 1 LIMIT 10

За исключением извлекаемых полей, все выглядит одинаково. Я что-то пропустил там?


person Lee Loftiss    schedule 30.06.2012    source источник


Ответы (1)


У вас неправильный внешний ключ. Внешний ключ — это значение в текущей таблице, которое ссылается на ключ во внешней таблице, поэтому в данном случае это должен быть user_id.

var $belongsTo = array('User' => array('className'  =>'User',
                                       'foreignKey' => 'user_id',
                                   'fields'     => array('username')
                                       )
                      );
person paullb    schedule 30.06.2012
comment
Привет. Я уже пробовал это, и это не сработало. Но даже если бы это было так, это не объясняет, почему вызов разбиения на страницы будет работать, а вызов find() — нет. Запросы, которые строят оба, идентичны в тех частях, которые связаны с получением информации от пользователя. - person Lee Loftiss; 30.06.2012
comment
Я обнаружил, что Cakephp может быть сомнительным, если вы не используете значения по умолчанию для внешних ключей ‹внешнее имя таблицы›_id - person paullb; 02.07.2012