Я использую SoftDeletableBehavior для моей модели адресов.
Это устанавливает его так, что когда вы удаляете адрес, он на самом деле не удаляет его, а вместо этого устанавливает для столбца deleted
в базе данных значение 1.
Это также изменяет ваш запрос в функции beforeFind
модели адреса, чтобы получать только те записи, где 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]
против [Address][0][Address][id]
)
Что я не понимаю, так это то, что если связанные данные, которые были получены, не используют свою собственную модель для поиска своих данных, тогда какой смысл? Разве это не одна из главных целей MVC?
Может, я просто не понимаю? Или я что-то упустил?
Может кто-нибудь просветить меня?