Activerecord Yii2:活动记录列别名

Activerecord Yii2:活动记录列别名,activerecord,alias,yii2,Activerecord,Alias,Yii2,我正在使用Yi2框架和高级模板 我的控制器文件中的列别名有问题,以下是我的代码: $models = new ActiveDataProvider([ 'query' => User::find()->select(['member'=>'fullname']) ]); echo GridView::widget([ 'dataProvider' => $model, 'columns' => [ 'member',

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

我的控制器文件中的列别名有问题,以下是我的代码:

$models = new ActiveDataProvider([
    'query' => User::find()->select(['member'=>'fullname'])
]);
echo GridView::widget([
    'dataProvider' => $model,
    'columns' => [
        'member',
    ],
]);
上述查询等同于:

SELECT fullname AS member FROM User;
我使用以下代码将数据发送到视图:

return $this->render('view', [
        'model' => $models,
    ]);
我想使用GridView小部件调用视图中的数据,下面是我的代码:

$models = new ActiveDataProvider([
    'query' => User::find()->select(['member'=>'fullname'])
]);
echo GridView::widget([
    'dataProvider' => $model,
    'columns' => [
        'member',
    ],
]);
但是,我得到一个错误,告诉我'member'参数没有定义。 如何通过调用列名来显示查询的数据?(在我的例子中,它使用别名)


我真的很感激任何帮助

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

class User extends ActiveRecord
{

    public $member;
阅读更多信息:

仅适用于模型属性<代码>成员显然没有出现在那里

首先,也许重构列名以使其更清晰,而不是编写别名更好?我看不出你的例子有什么好处

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

用法示例:

ArrayDataProvider:

use yii\data\ArrayDataProvider;

$dataProvider = new ArrayDataProvider([
    'allModels' => User::find()->select(['member' => 'fullname'])->all(),
]);
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(),
]);
SqlDataProvider:

use yii\data\ArrayDataProvider;

$dataProvider = new ArrayDataProvider([
    'allModels' => User::find()->select(['member' => 'fullname'])->all(),
]);
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(),
]);
有关使用的更多详细信息和功能,请参阅官方文档

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

对于一个别名,使用模型方法添加附加属性(如soju所建议)会更好


但在我看来,这是没有用的,最好重构列名,以防出现歧义。

这很有效,非常感谢。我以前尝试在函数规则中添加'member',从未想过将其作为公共变量。它需要适当的解释来帮助将来的人们。我之所以使用别名,是因为我的查询使用了更多的sql命令。它是这样的:选择EXTRACT(month from time)作为month from user在我看来别名只是解决了这个问题,但感谢您对SqlDataProvider的解释……下次我也会使用它:)您最好在问题中提到这些细节。使用
SqlDataProvider
会更好。