CakePHP: ассоциация моделей hasMany не рекурсивно выбирается - PullRequest
1 голос
/ 08 сентября 2011

У меня есть следующая ассоциация:

Site - hasMany - Sitekey Sitekey - ownTo - Site

sites.id - первичный ключ sitekeys.site_id - внешний ключ

модель сайта: var $ hasMany = array ('Sitekey');

запрос: $ this-> find ('all', array ('условие' => array ('Sitekey.keyword_id' => $key), 'recursive' => 1));

извлечение (поиск 'all') рекурсивно с этой ассоциацией не работает.Я попытался явно определить имя класса, внешний ключ и т. Д. *

В качестве последней попытки я просто попытался изменить модель сайта на: var $ hasOne = array ('Sitekey');

Когда я делаю рекурсивный поиск 'all', он выполняет объединение и возвращает данные правильно.Любая идея, что я делаю неправильно или методы, которые я могу использовать для устранения / устранения проблемы?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011

Пытались ли вы указать класс и ключ, когда указали hasMany (и, в этом смысле, принадлежат)?

var $hasMany = array( 'Sitekey' => array(
  'className' => 'Site',
  'foreignKey' => 'site_id'
));

Для меня это происходит, когда Inflector неправильно не единолизирует и не приумножает ваши существительные,Я установил практику, чтобы всегда проверять это в первую очередь.

Если это работает, то в теории вы должны посмотреть, почему он не распознает это.Создайте другую модель Bar (или другое известное ей слово) и дайте ей те же ассоциации, что и у sitekey, и посмотрите, работает ли она на вашем сайте.Если это так, опять же, скорее всего, это инфлектор на Sitekey.

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

Может ли это быть что-то простое, как это? Ключевое слово $ this, которое вы использовали (если мы находимся в контроллере), будет экземпляром контроллера, а не моделью. Поэтому ваши результаты будут основаны на модели по умолчанию для контроллера. Убедитесь, что ваш контроллер «использует» модель, которую вы пытаетесь запросить.

$results = $ModelName->find('all', array('conditions' => array('Sitekey.keyword_id' => $key), 'recursive' => 1));

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

...