Yii2,Softdelete,self :: tableName(),忽略`deleted`记录

时间:2016-03-04 02:13:45

标签: php activerecord yii2 soft-delete

我有一个包含SoftDelete行为(cornernote/yii2-softdelete)的基础模型类。删除记录时,表deleted_at中的列将填充时间戳。

尝试覆盖base模型中的find()方法,但self :: className()不返回带有名称的表前缀。

return parent::find()->where([self::tableName() . '.deleted_at' => null]);

我必须将它添加到每个模型类中才能获得正确的(完整)表名。

问:如何最好地忽略已填充列的表中的记录。当为ActiveDataProvider([...]),find() - > ... one()和find() - > ... all()情况访问模型时,解决方案必须工作。

TIA

2 个答案:

答案 0 :(得分:1)

您应该阅读延迟静态绑定

http://php.net/manual/en/language.oop5.late-static-bindings.php

  

后期静态绑定引入了static关键字,该关键字引用了最初在运行时调用的类

因此,您应该只使用 static::tableName() 而不是self::tableName()

答案 1 :(得分:0)

我认为你应该使用Customized Query Class

它已经存在于库中,您正在使用的是什么 - here github

如果您愿意 - 您还可以重新定义find方法。