Yii2 - 获取所有唯一模型属性值的最佳方法是什么?

时间:2015-08-15 11:52:15

标签: php sql arrays activerecord yii2

我的模型常见问题解答有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
    ]);
}

如何在Controller中使用Yii2或PHP获取$ chapter的唯一值数组?让我们在sql中说它看起来像

SELECT DISTINCT chapter FROM ' faq_table'

1 个答案:

答案 0 :(得分:14)

这可以这样做:

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

如果您希望结果为普通数组而不是包含常规模型的数组,则可以在asArray()之前添加->all()

运行下面的代码会显示它会生成这个确切的查询。

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

额外评论。我还认为,如果要使用模型,最好删除行$faq = Faq::find()->all();并使用$dataProvider->getModels()。这样,获取数据的查询不会运行两次。