面向对象的一小步:添加ActiveRecord的Scope功能 (2)

另外,如果你喜欢,还可以在BaseActiveQuery加上另外两个常用的方法,用来转化为数组:

public function get() { return $this->asArray()->all(); } public function first() { return $this->asArray()->one(); }

BaseActiveRecord和BaseActiveQuery都可以放在自己的一个公共目录下,例如

common/base/BaseActiveRecord.php common/base/BaseActiveQuery.php 使用

实现了前面几步,我们就可以愉快的玩耍了。
Scope方法可以作为静态方法被AR调用,也可以作为非静态方法被AQ调用,同时支持链式操作,灵活性非常大。

Student::male()->checked()->age(20)->all(); Student::age(20)->checked()->get(); Student::find()->checked()->where(['is_deleted' => '0'])->male()->all(); Student::checked()->where(['like', 'name', 'Jason'])->female()->first(); .....

这样的查询是不是更清晰,更友好?

进一步优化

PHP是世界上最好的语言——这句话一直争议不断,然而PHPStorm是PHP最好的编辑器却似乎越来越没有争议。因此为了PHPStorm能更好的追踪代码,还需要做小小的优化。
在AR(如Student)头部DOC部分添加:

* @method BaseActiveQuery checked() * @method BaseActiveQuery male() * @method BaseActiveQuery age()

恭喜Yii2进一步向面向对象化又迈出了坚实的一小步!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfysx.html