cakephp在afterDelete

时间:2015-06-21 22:52:52

标签: cakephp cakephp-3.0

我在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"

3 个答案:

答案 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文件中记录一个数组,其中包含已删除用户的所有数据。