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

Posted

技术标签:

【中文标题】Yii2 - 获取所有唯一模型属性值的最佳方法是啥?【英文标题】:Yii2 - What is the best way to get all unique model attribute values?Yii2 - 获取所有唯一模型属性值的最佳方法是什么? 【发布时间】:2015-11-08 13:23:57 【问题描述】:

我的模型常见问题解答有 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】:

这可以这样完成:

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

如果您希望将结果作为普通数组而不是包含常见问题解答模型的数组,您可以在 ->all() 之前添加 asArray()

运行下面的代码会告诉你它会产生这个精确的查询。

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

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

【讨论】:

此查询返回一个活动记录数组。是否存在返回具有列值的数组的方法? ['chapter1','chapter2'] 好的,我找到了解决办法:Faq::find()->select('chapter')->distinct()->asArray()->column();

以上是关于Yii2 - 获取所有唯一模型属性值的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

从函数返回多个值的最佳方法是啥?

从函数返回多个值的最佳方法是啥?

在 pyspark 中显示数据框不同值的最佳方法是啥?

从时间戳中提取时间分辨率以获取列中特定值的最佳方法是啥?

ASP.NET MVC 4,EF5,模型中的唯一属性 - 最佳实践?

使用视图模型中的属性值实现方法的最佳实践是啥?