【发布时间】:2020-09-26 07:54:55
【问题描述】:
假设我有一个名为“项目”的表。其中一列包含文件名字符串。 我想做的是在从数据库中删除行之后/之前删除文件。我明白了,Codeigniter 4 的模型现在可以使用回调函数。但我不知道如何访问数据,尤其是文件名字段。
<?php namespace App\Models;
use CodeIgniter\Model;
class ProjectModel extends Model {
protected $table = 'projects';
protected $primaryKey = 'id';
protected $returnType = 'App\Entities\Project';
protected $useSoftDeletes = false;
protected $allowedFields = ['id', 'title', 'desc', 'filename'];
protected $useTimestamps = true;
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $afterDelete = ['deleteFiles'];
protected function deleteFiles() {
// here i would like to delete the file
}
}
还是我以错误的方式处理这个问题?我应该只在我的控制器中获取数据,删除文件然后从数据库中删除行吗?我会以这种方式在 CI3 中这样做,但现在我发现了 CI4 中的回调,我认为这是一种更优雅的方式/更好的做法。 谢谢。
编辑:
后来我发现,更好的办法是使用 beforeDelete 方法。但我无法访问当前行。如果我这样使用删除方法:
$this->projectsModel->delete(3);
我可以访问 Id:
protected $beforeDelete = ['deleteFiles'];
protected function deleteImages($data) {
$id = $data['id'][0];
}
但是当我尝试一次删除更多行时:
$this->projectModel->where('some_prop', 'XY')->delete();
传递给 beforeDelete 函数的 $data 等于 NULL
【问题讨论】:
标签: codeigniter-4