Yii2-каков наилучший способ получить все уникальные значения атрибутов модели?

моя модель FAQ имеет 4 атрибута

* @property integer $id * @property string $chapter * @property string $question * @property string $answer

прямо сейчас моя функция actionIndex выглядит как

public function actionIndex()
{

    $faq = Faq::find()->all();

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

    return $this->render('index', [
        'dataProvider' => $dataProvider,
        'faq' => $faq
    ]);
}

как я могу получить массив уникальных значений $chapter с помощью Yii2 или PHP в контроллере? Скажем, в sql это выглядит как

SELECT DISTINCT chapter FROM ' faq_table'

1 ответов


это можно сделать так:

Faq::find()->select('chapter')->distinct()->all();

если вы хотите получить результаты в виде простого массива вместо массива, содержащего модели Faq, вы можете добавить asArray() до ->all().

запуск кода ниже покажет вам, что он будет производить этот точный запрос.

Faq::find()->select('chapter')->distinct()->createCommand()->getSql();

дополнительные комментарии. Я также думаю, что лучше удалить строку $faq = Faq::find()->all(); и использовать $dataProvider->getModels() если вы хотите использовать модели. Таким образом, запрос на получение данных не выполняется дважды.