2015-07-31 13:41:41 3006次浏览 3条回答 0 悬赏 20 金钱
public function search($params)
{
    $query = $this->finder->getUserQuery();

    $dataProvider = new ActiveDataProvider([
        'query' => $query,
    ]);

    if (!($this->load($params) && $this->validate())) {
        return $dataProvider;
    }
    
    if ($this->created_at !== null) {
        $date = strtotime($this->created_at);
        $query->andFilterWhere(['between', 'created_at', $date, $date + 3600 * 24]);
    }
    
    $query->andFilterWhere(['like', 'username', $this->username])
        ->andFilterWhere(['like', 'email', $this->email])
        ->andFilterWhere(['registration_ip' => $this->registration_ip]);

    return $dataProvider;
}

最佳答案

  • Ricky_nie 发布于 2015-07-31 14:07 举报

    所以...问题是啥?

    1 条回复
    回复于 2015-07-31 22:37 回复

    不好意思问题没说完。我的问题是,$query变量之前就赋值给$dataProvider了,之后修改$query对$dataProvider有什么影响。后来在群里得到答案是,$query是对象,是引用。还是感谢各位热心回答!

  • 回答于 2015-07-31 15:34 举报

    楼主的网名好熟悉~是学Drupal的吧

  • 回答于 2015-07-31 16:08 举报

    这是yii2的过滤套路,重点是query。

    假设Gridview中填入过滤条件后,url是这样:

    http://domain/advertise/customer?Sch[code]=me&Sch[name]=self&Sch[description]=test&Sch[notes]=
    

    那么控制器会将Yii::$app->request->queryParams作为参数调用search($params),打印出的$params是这样的:

    [
        'Sch' => [
            'code' => 'me'
            'name' => 'self'
            'description' => 'test'
            'notes' => ''
        ]
    ]
    

    search函数中load($params)后,$this打印出来可以看到$this->code,$this->name等的值:

    [yii\db\BaseActiveRecord:_attributes] => [
        'code' => 'me'
        'name' => 'self'
        'description' => 'test'
        'notes' => ''
    ]
    

    至于你的例子中$this->created_at的处理,则表示如果指定了'创建时间',那么就增加过滤条件:那个时刻起24小时内创建的记录。

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
drupal
职场新人

drupal

注册时间:2011-09-15
最后登录:2015-09-06
在线时长:3小时13分
  • 粉丝4
  • 金钱20
  • 威望0
  • 积分50

热门问题