沃斯尼达耶

沃斯尼达耶

清华落榜生

  • 财富值2065
  • 威望值0
  • 总积分2405

个人信息

  • 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个金钱
  • bd97c636349468bd457338afe289dd2e.jpg

  • 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

总监 等级规则
2405/5000
资料完整度
40/100
用户活跃度
0/100

Ta的关注

0

Ta的粉丝

8

Ta的访客

147