strive

strive

皮肤光滑不长痘,零食吃遍不长肉

  • 财富值20777
  • 威望值40
  • 总积分26847

个人信息

  • 2018-08-08 已签到
    连续签到87天,获得了20个金钱
  • 2018-08-09 已签到
    连续签到88天,获得了20个金钱
  • 赞了回复

    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();
    
    
  • 赞了说说
    开始学Python了
  • 2018-08-07 已签到
    连续签到86天,获得了20个金钱
  • 赞了说说
    时间会把对的人 最好的人留在最后 毕竟喜欢是一阵风 而爱是细水常流 ​ ​​​
  • 赞了话题
    使用 jQuery 生成二维码
  • 2018-08-06 已签到
    连续签到85天,获得了20个金钱
  • 2018-08-05 已签到
    连续签到84天,获得了20个金钱
副董事长 等级规则
26847/50000
资料完整度
70/100
用户活跃度
60/100

Ta的关注

338

Ta的粉丝

340

Ta的访客

922