2015-02-25 5 views
0

я модель под названием Пользователи определяется как:поведение CakePHP не работает с bindModel

class User extends AppModel { 

... 

public $actsAs = array(
    'Date' => array('date_birth') 
); 

... 

Датаповедение преобразует поле date_birth из формата ISO ('гггг-мм-дд ') в формат локали (' dd/mm/yyyy ').

Когда из моего контроллера я находка, такие как

$this->User->find(...) 

поведение работает отлично и поле date_birth отформатирован как дд/мм/гггг.

Теперь это моя проблема:

У меня есть вторая модель под названием Отзывы.

В мой контроллер я использую метод bindModel создать следующие отношения между двумя моделями:

Обзор belongsTo Пользователь

Когда я $ this-> Обзор-> найти() информация пользователя добавляется вместе с информацией об обзоре. Но поведение, определенное в модели пользователя, не применяется, а поле date_birth отформатировано как yyyy-mm-dd.

Есть ли причина для этого?

+0

Вы просто с помощью рекурсивной, чтобы получить ваши дополнительные данные, или вы используя Containable (как и должно быть)? Я попытался бы убедиться, что он не запускается. Он может работать, но поскольку это связанная модель, данные форматируются по-разному, и ваша логика может потребоваться изменить. Подробнее здесь: http://book.cakephp.org/2.0/ru/models/callback-methods.html#afterfind – Dave

+0

Я не использую Containable. Метод afterFind в поведении не вызывается. Я проверю Containable, спасибо. – Franz

+0

Кроме того, почему вы привязываете модель к контроллеру? Кажется, что Review всегда будет принадлежать пользователю через ассоциации модели. Я предполагаю, что это потому, что вы используете рекурсию, но как только вы переключите все приложение на '$ recursive = -1; '(в AppModel) и используйте Containable для получения дополнительных данных модели, вы также можете начать фактически настраивать все свои ассоциации полностью и не беспокоясь о том, что нужно постоянно связывать/развязывать все заботы о том, чтобы они вытащили лишние нежелательные данные. Итак, установите '$ recursive -1;' и '$ actAs = array ('Containable')' в вашем AppModel и создайте все ассоциации. – Dave

ответ

0

Для тех, кто заинтересован, я решил эту проблему путем изменения кода в поведении так, чтобы принять поля формы User.date_birth