Yii2框架学习 4-1 modelSearch类学习 自定义搜索,关联查询

1、数据提供者DataProvider,如用在modelsearch类中

 

 

 

 

 

 

 

 

 

 

<?php

namespace common\models;

use Yii;
use yii\base\Model;
use yii\data\ActiveDataProvider;
use common\models\Post;

/**
 * PostSearch represents the model behind the search form about `common\models\Post`.
 */
class PostSearch extends Post
{

    //增加数据的字段属性
    public function attributes()
    {
        return array_merge(parent::attributes(), ['author_name']);
    }

    /**
     * @inheritdoc
     */
    public function rules()
    {
        return [
            [['id', 'status', 'create_time', 'update_time', 'author_id'], 'integer'],
            [['title', 'content', 'tags', 'author_name'], 'safe'],
        ];
    }

    /**
     * @inheritdoc
     */
    public function scenarios()
    {
        // bypass scenarios() implementation in the parent class
        return Model::scenarios();
    }

    /**
     * Creates data provider instance with search query applied
     *
     * @param array $params
     *
     * @return ActiveDataProvider
     */
    public function search($params)
    {
        $query = Post::find();

        // add conditions that should always apply here

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

        $this->load($params);

        if (!$this->validate()) {
            // uncomment the following line if you do not want to return any records when validation fails
            // $query->where('0=1');
            return $dataProvider;
        }

        // grid filtering conditions
        $query->andFilterWhere([
            'id' => $this->id,
            'status' => $this->status,
            'create_time' => $this->create_time,
            'update_time' => $this->update_time,
            'author_id' => $this->author_id,
        ]);

        $query->andFilterWhere(['like', 'title', $this->title])
            ->andFilterWhere(['like', 'content', $this->content])
            ->andFilterWhere(['like', 'tags', $this->tags]);

        //增加自定义查询
        $query->join('INNER JOIN', 'adminuser', 'post.author_id = adminuser.id');
        $query->andFilterWhere(['like', 'adminuser.nickname', $this->author_name]);


        //增加自定义的索引字段
        $dataProvider->sort->attributes['author_name'] = [
            'asc' => ['adminuser.nickname'=>SORT_ASC],
            'desc' => ['adminuser.nickname'=>SORT_DESC],
        ];

    //设置待审核的排在前面
    $dataProvider->sort->defaultOrder = [
    'status' => SORT_ASC,
    'id' => SORT_DESC
    ];

return $dataProvider; } }

 

posted @ 2020-04-19 01:53  没事就更  阅读(1080)  评论(0编辑  收藏  举报