2020-01-03 18:00:43 1351次浏览 1条回答 0 悬赏 50 金钱

文档看了,还是不太懂,求助一下各位大佬。
修改 $query 后应该返回一个什么?

补充于 2020-01-03 18:01

上面写错了。是 filter => function($query)

最佳答案

  • 发布于 2020-01-04 13:53 举报

    这个匿名函数 不需要返回值,直接操作 $query 就是了(因为这是 存在性检查,所以肯定有数据库查询)

    filter => ["field1" => "value1"]
    

    如上代码 等效于

    filter => function($query) {
       $query->andWhere(["field1" => "value1"]);
    }
    

    所以,对于 and 的查询条件,是不需要用这个 匿名函数的,直接把 过滤条件数组 赋值给 filter 就可以了。当 你想要一个 or 查询的时候,就只能用这个 匿名函数了

    filter => function($query) {
       $query->orWhere(["field1" => "value1"]);
    }
    

    举一个 有点牵强的 示例场景:
    注册的时候,需要填入一个 推荐人用户名,要求 这个推荐人用户名 必须存在,这时 是用不到 filter 属性的。

    假如用户表是做的 软删除,要求这个推荐人用户名 不能是 已删除的用户,这时 就需要用到 filter 属性了,不过,没必要用匿名函数,直接 给 filter 赋值 就可以了 filter => ["<>", "isDeleted", 1]

    在假如,除了填写 推荐人用户名 还可以填写 推荐人的邮箱(用同一个输入框),这时候就只能用 匿名函数了,考虑一下,这个 该怎么写呢

    1 条回复
    回复于 2020-01-04 16:19 回复

    非常感谢!关于推荐人这个,我个人是这样想的

    ['recommend', 'exist', 'targetAttribute' => ['recommend' => 'email'], 'filter' => function($query) {
                    $query->orWhere(['username' => $this->recommend]);
                }],
    
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
PenDon
主管

PenDon 长沙

注册时间:2019-08-21
最后登录:2021-11-19
在线时长:22小时42分
  • 粉丝0
  • 金钱540
  • 威望10
  • 积分860

热门问题