RAND()

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
NEIRON
Сообщения: 102
Зарегистрирован: 2013.10.23, 07:18

RAND()

Сообщение NEIRON »

Код: Выделить всё

public function actionIndex()
    {
        $searchModel = new TeamSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        
        return $this->render(
            'index',
            [
                'searchModel' => $searchModel,
                'dataProvider' => $dataProvider,
            ]
        );
    }
Подскажите пожалуйста, если нужно сделать произвольную выборку (RANDOM), то кому нужно эти параметры передавать?
TeamSearch - класс стандартный, сделанный через Gii

Вот тут есть примеры: https://www.yiiframework.com/doc/guide/ ... ry-builder

Код: Выделить всё

$query->orderBy('id ASC, name DESC');
Но в моём случае, непонятно куда это прописать. Спасибо
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: RAND()

Сообщение yiiliveext »

Вообще-то RANDOM делается так

Код: Выделить всё

->orderBy(new \yii\db\Expression('rand()'))
Аватара пользователя
NEIRON
Сообщения: 102
Зарегистрирован: 2013.10.23, 07:18

Re: RAND()

Сообщение NEIRON »

yiiliveext писал(а): 2019.12.26, 18:11 Вообще-то RANDOM делается так

Код: Выделить всё

->orderBy(new \yii\db\Expression('rand()'))
Да, вот так получилось

Код: Выделить всё

public function search($params)
    {
        $query = Team::find();

        // add conditions that should always apply here

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

        $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,
                'birth' => $this->birth
            ]
        );

        $query->orderBy(new \yii\db\Expression('rand()'));

        $query->andFilterWhere(['like', 'name', $this->name])
            ->andFilterWhere(['like', 'full_name', $this->full_name])
            ->andFilterWhere(['like', 'email', $this->email]);

        return $dataProvider;
    }
Но есть и другие VIEW, которые используют этот же класса, и как правильно сделать, чтобы у них сортировка была другая, в зависимости от указынных параметров, например, там есть GridView которые тоже позволяет делать свои сортировки и тоже обращается к этому методу,а тут получается я всем это жёстко прописал такую сортировку
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: RAND()

Сообщение yiiliveext »

Код: Выделить всё

public function search($params, $randomOrder = false)
    {
        $query = Team::find();

        // add conditions that should always apply here

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

        $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,
                'birth' => $this->birth
            ]
        );
        if ($randomOrder) {
            $query->orderBy(new \yii\db\Expression('rand()'));
        }
        $query->andFilterWhere(['like', 'name', $this->name])
            ->andFilterWhere(['like', 'full_name', $this->full_name])
            ->andFilterWhere(['like', 'email', $this->email]);

        return $dataProvider;
    }

В контроллере в метод search передаете вторым параметром true, если нужна случайная сортировка.
Аватара пользователя
NEIRON
Сообщения: 102
Зарегистрирован: 2013.10.23, 07:18

Re: RAND()

Сообщение NEIRON »

yiiliveext писал(а): 2019.12.26, 20:03 В контроллере в метод search передаете вторым параметром true, если нужна случайная сортировка.
Супер. Спасибо
Ответить