cakephp 在 afterDelete 中使用记录值

cakephp use record values in afterDelete

我在 CakePHP 3.0 中为 EmployeesTable.php 使用软删除插件。

当我软删除员工时,我希望在 afterDelete()

中用 $user->set('active', false); 更新他们的关联用户 table

我的问题是将员工 table 中使用的 user_id 放入 afterDelete()

我什至尝试只删除员工的 ID 并对其进行查找,但我看到的示例使用 $this->id return 和错误 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);
}

我也尝试在 beforeDelete() 中捕获 $this->id 并将其传递给 afterDelete() 但再次出现错误 Table "App\Model\Table\EmployeesTable" is not associated with "id"

我还没有用过 Cake 3,但我总是在 Cake 2.x 中使用你的最后一次尝试解决了这个问题。问题是,$this->id 不是一个可以安全使用的变量,因为它已经存在于模型中并且在数据库交互期间被修改。

我会说你只需要在你的模型中有一个 private $deletedId;,在 beforeDelete() 中设置它并在 afterDelete() 中获取它。您甚至可以在使用后立即取消设置,以防万一。

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);
}

我不确定,但我认为您可以将 Event 对象与以下实体一起使用:

  public function afterDelete(Event $event) {
     $entity = $event->data["entity"];
     Log::debug("all data: " . $entity);
  }

这将在 debug.log 文件中记录一个数组,其中包含已删除用户的所有数据。