Почему я получаю неопределенную ошибку свойства, когда мои отношения кажутся правильными? - PullRequest
0 голосов
/ 13 июля 2010

У меня небольшая проблема, которую я не могу понять, но она должна быть очень простой.
У меня есть следующая структура модели в моем приложении cakePHP (1.3):

ProspectiveQuote [hasMany] QuoteUnit [belongsTo] Unit

но в моем ProspectiveQuotesController строка:

$this->ProspectiveQuote->QuoteUnit->Unit->find('list');

выдает мне следующую ошибку:

Undefined property: AppModel::$Unit

Конечно, это не должно смотреть на AppModel, это должно смотреть на QuoteUnit.
Если я сделаю $this->ProspectiveQuote->QuoteUnit->find('all'), то, похоже, получу результаты (хотя и без каких-либо связанных данных модели ...), поэтому он, очевидно, найдет QuoteUnit достаточно хорошо, и я дважды проверил его связь с модулем, и все это выглядит нормально ...

Кажется, это достаточно простая проблема. Из того, что я вижу, люди с этой проблемой обычно имеют неправильные названия моделей (или множественное число), но здесь это не так ...
Что я могу делать не так?

Ответы [ 2 ]

2 голосов
/ 13 июля 2010

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

Еще одна замечательная вещь - это взять DebugKit http://www.ohloh.net/p/cakephp-debugkit, который поможет вамсм. ваши переменные и ваши sql-запросы.

Как уже упоминалось в комментарии Лео, я бы попытался избежать uses(), как он выложил, или добавил 1.2 немного больших издержек в ваш стек.

0 голосов
/ 13 июля 2010

Вы установили var $uses = array('ProspectiveQuote','QuoteUnit','Unit'); в своем контроллере?(хотя есть несколько более эффективные способы сделать это) - см. http://book.cakephp.org/2.0/en/controllers.html#controller-attributes

Если вы сделаете это, вы можете получить доступ к связанным моделям, таким как:

$this->Unit->find('list');

или

$this->ProspectiveQuote->QuoteUnit->Unit->find('list');

Я знаю, какой я предпочитаю.

...