strive
- strive 2018-08-08 已签到连续签到87天,获得了20个金钱
- strive 2018-08-09 已签到连续签到88天,获得了20个金钱
- strive 赞了回复
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();
- strive 赞了说说开始学Python了
- strive 2018-08-07 已签到连续签到86天,获得了20个金钱
- strive 赞了说说时间会把对的人 最好的人留在最后 毕竟喜欢是一阵风 而爱是细水常流
- strive 2018-08-06 已签到连续签到85天,获得了20个金钱
- strive 2018-08-05 已签到连续签到84天,获得了20个金钱