沃斯尼达耶
- 沃斯尼达耶 2018-08-30 已签到连续签到2天,获得了10个金钱
- 沃斯尼达耶 赞了说说祝愿天下同行,bug少 下班早 身体好 活到老 !
- 沃斯尼达耶 发表了说说不困
- 沃斯尼达耶 2018-08-29 已签到连续签到1天,获得了5个金钱
- 沃斯尼达耶 2018-08-21 已签到连续签到1天,获得了5个金钱
- 沃斯尼达耶 2018-08-14 已签到连续签到2天,获得了10个金钱
- 沃斯尼达耶 2018-08-13 已签到连续签到1天,获得了5个金钱
- 沃斯尼达耶 评论了源码 Yii2 Scope 功能的改进
顶
111三生三世十里桃花
Yii 其中一个特点是高度可定制,任何一个核心类都可以经过自定义,变得适合自己的项目或操作习惯。例如你觉得默认的 where() 不好用,那就自己改一下,让它用着更加顺手。
这是Yii2设计的不太好的一个方面。干嘛不把where()的功能弄的再强大点
我认为这见仁见智吧。如前所述,Yii 已经提供了让核心类“变强大”的方式,像 where() 这种使用频率高、基础的方法,更多考虑的是如何设计得足够通用,就像《迷你世界》里面的石块一样,使用同
一个的石块,不同的玩家可以发挥想象力,盖出各种漂亮的建筑。最后简单一个我日常使用 ActiveQuery 的习惯,抛砖引玉,仅供参考:
常用的查询条件尽可能在 AcriveQuery 内以方法的形式定义
以楼主举的学生、老师模型为例,可以在 StudtentQuery 内定义如下常用方法:
public function youngerThan($age) { return $this->andWhere(['<', '{{%student}}.age', $age]); } public function male() { return $this->andWhere(['{{%student}}.sex' => 1]); } public function toughtBy($teacherIds) { return $this->andWhere(['{{%teacher}}.id' => $teacherIds]); }
方法只要定义得恰当,构建 AcriveQuery 时可以少用甚至不用 where() , andWhere() 或 orWhere(). 例如,我想查一下所有年龄小于 18 岁、同时被张三和李四两位老师教的男同学,就可以这样写:
$students = Student::find()->joinWith(['teacher'])->youngerThan(18)->taughtBy([3, 5])->male()->all();
这个AcriveQuery 的使用发放在哪里能找到, 只有英文的看不懂啊。xx