我正在为我的地址模型使用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)));
然后它确实在 Address 模型上使用 beforeFind 过滤器并返回正确的数据。
(当然是不同的格式[Address][0][id]
vs [Address][0][Address][id]
)
我不明白的是,如果提取的关联数据不使用自己的模型来查找数据,那有什么意义呢?这不是 MVC 的主要目的之一吗?
也许我只是不明白?或者我错过了什么?
有人可以启发我吗?