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