我在CakePHP 3.0中使用了EmployeesTable.php的软删除插件。
当我软删除员工时,我希望在$user->set('active', false);
afterDelete()
更新关联的用户表
我的问题是将employees表中使用的user_id
放入afterDelete()
我甚至试图删除员工的ID并对其进行查找但我使用$this->id
返回的示例和Table "App\Model\Table\EmployeesTable" is not associated with "id"
中的错误beforeDelete
。
EmployeesTable.php
public function afterDelete( ) {
$user = $this->Users->get($this->user_id);
$user->set('active', false);
$this->Users->save($user);
}
我还尝试在$this->id
中抓取beforeDelete()
并将其传递给afterDelete()
,但又一次收到错误Table "App\Model\Table\EmployeesTable" is not associated with "id"
答案 0 :(得分:1)
private $deletedUserId;
public function beforeDelete($event, $entity, $options) {
$this->deletedUserId = $entity->user_id;
}
public function afterDelete( ) {
$user = $this->Users->get($this->deletedUserId);
$user->set('active', false);
$this->Users->save($user);
}
答案 1 :(得分:0)
我还没有使用Cake 3,但是我总是在Cake 2.x中使用你的最后一次尝试来解决这个问题。问题是,$this->id
不是一个安全的变量,因为它已经存在于模型中并在数据库交互期间被修改。
我说你只需要在模型中加private $deletedId;
,在beforeDelete()
中设置它并在afterDelete()
中获取它。你甚至可以在使用它之后立即取消它,以防万一。
答案 2 :(得分:0)
我不确定,但我认为您可以将Event对象与以下实体一起使用:
public function afterDelete(Event $event) {
$entity = $event->data["entity"];
Log::debug("all data: " . $entity);
}
这将在debug.log文件中记录一个数组,其中包含已删除用户的所有数据。