Yii2:活动记录列别名

时间:2015-03-26 08:15:22

标签: activerecord alias yii2

我正在使用Yii2框架和高级模板。

我的控制器文件中的列别名出现问题,这是我的代码:

$models = new ActiveDataProvider([
    'query' => User::find()->select(['member'=>'fullname'])
]);

以上查询等同于:

SELECT fullname AS member FROM User;

我使用以下代码将数据发送到视图:

return $this->render('view', [
        'model' => $models,
    ]);

我想使用GridView小部件在我的视图中调用数据,这是我的代码:

echo GridView::widget([
    'dataProvider' => $model,
    'columns' => [
        'member',
    ],
]);

但是,我收到一个错误,告诉我'member'参数没有定义。 如何通过调用列名来显示查询数据? (在我的情况下,它使用别名)

我非常感谢任何帮助!!

2 个答案:

答案 0 :(得分:5)

您只需在模型中声明此属性:

class User extends ActiveRecord
{

    public $member;

了解详情:https://www.yiiframework.com/doc/guide/2.0/en/db-active-record#selecting-extra-fields

答案 1 :(得分:2)

ActiveDataProvider仅适用于模型属性。 member显然没有出现在那里。

首先,也许最好将列名重构​​为更清晰而不是编写别名?我认为你的例子没有任何好处。

如果您仍然需要使用别名,作为向课程添加其他属性的替代方法,您可以在ArrayDataProviderSqlDataProvider的帮助下使用别名。

用法示例:

<强> ArrayDataProvider:

use yii\data\ArrayDataProvider;

$dataProvider = new ArrayDataProvider([
    'allModels' => User::find()->select(['member' => 'fullname'])->all(),
]);

<强>的SqlDataProvider:

use yii\data\SqlDataProvider;
use yii\db\Query;

...

$query = (new Query())
    ->select(['member' => 'fullname'])
    ->from('users');

$command = $query->createCommand();

$dataProvider = new SqlDataProvider([
    'sql' => $command->sql,
    'params' => $command->params,
    'totalCount' => $query->count(),
]);

有关使用的更多详情和功能,请参阅官方文档。

对于您的情况,最好使用ArrayDataProviderSqlDataProvider用于更复杂的查询。

如果使用一个别名并使用模型方法,则可以更好地添加 soju 建议的附加属性。

但是在我看来这是没用的,如果有些含糊不清,最好重构列名。