Я использую SoftDeletableBehavior для своей модели адресов.
Это устанавливает его так, что когда вы удаляете адрес, он на самом деле не удаляет его, вместо этого устанавливает столбец deleted
в базе данных в 1.
Это также изменяет ваш запрос в функции beforeFind
модели Address, чтобы извлекать только записи, где deleted != 1
Это работает, когда я просматриваю адреса через контроллер адресов, например /addresses/show/43
.
Однако мой Users
контроллер hasMany
обращается. Поэтому, когда я нахожусь в контроллере пользователей и вызываю $this->find('first');
, чтобы получить пользователя, я также получаю связанные с ним адреса. Я ожидаю, что это НЕ даст мне (мягко) удаленные адреса, но это ДЕЙСТВУЕТ. Также никогда не вызывается фильтр beforeFilter для модели адреса.
Как правильно с этим справиться?
Обновлять.
Видимо, когда я делаю это:
$data = $this->User->find('first',array('conditions' => array('User.id' => $id),'recursive' => 2));
У меня есть массив $data['User]
и массив $data['Address]
(вместе с другими).
Но это не использует фильтр beforeFind в модели адреса. Значит у меня неправильные данные.
Но если я сделаю это:
$data = $this->User->find('first',array('conditions' => array('User.id' => $id),'recursive' => 2));
$data['Address'] = $this->User->Address->find('all',array('conditions'=>array('user_id'=>$id)));
Затем он использует фильтр beforeFind для модели Address и возвращает правильные данные.
(конечно в другом формате [Address][0][id]
vs [Address][0][Address][id]
)
Чего я не понимаю, так это того, что если связанные данные, которые извлекаются, не используют свою собственную модель для поиска своих данных, то в чем смысл? Разве это не одна из основных целей MVC?
Может я просто не понимаю? Или я что-то упускаю?
Может кто-нибудь просветить меня?