Yii2:活动记录列别名
Yii2 : Active Record Column Aliases
我正在使用带有高级模板的 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' 参数未定义。
如何通过调用列名来显示查询的数据? (在我的例子中它使用别名)
非常感谢任何形式的帮助!!
您只需在模型中声明此属性即可:
class User extends ActiveRecord
{
public $member;
阅读更多:https://www.yiiframework.com/doc/guide/2.0/en/db-active-record#selecting-extra-fields
ActiveDataProvider 仅适用于模型属性。 member
显然那里没有介绍。
首先,也许重构列名更清晰而不是写别名更好?我看不到您的示例有任何好处。
如果您仍然需要使用别名,作为向 class 添加额外属性的替代方法,您可以在 ArrayDataProvider and SqlDataProvider.
的帮助下使用它们
用法示例:
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(),
]);
更多细节和使用特点请查看官方文档。
对于您的情况,最好使用 ArrayDataProvider
,SqlDataProvider
用于更复杂的查询。
在一个别名的情况下,使用模型方法添加额外的属性,如 soju 所建议的,可能会更好。
但在我看来这是没有用的,最好重构列名以防出现歧义。
我正在使用带有高级模板的 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' 参数未定义。 如何通过调用列名来显示查询的数据? (在我的例子中它使用别名)
非常感谢任何形式的帮助!!
您只需在模型中声明此属性即可:
class User extends ActiveRecord
{
public $member;
阅读更多:https://www.yiiframework.com/doc/guide/2.0/en/db-active-record#selecting-extra-fields
ActiveDataProvider 仅适用于模型属性。 member
显然那里没有介绍。
首先,也许重构列名更清晰而不是写别名更好?我看不到您的示例有任何好处。
如果您仍然需要使用别名,作为向 class 添加额外属性的替代方法,您可以在 ArrayDataProvider and SqlDataProvider.
的帮助下使用它们用法示例:
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(),
]);
更多细节和使用特点请查看官方文档。
对于您的情况,最好使用 ArrayDataProvider
,SqlDataProvider
用于更复杂的查询。
在一个别名的情况下,使用模型方法添加额外的属性,如 soju 所建议的,可能会更好。
但在我看来这是没有用的,最好重构列名以防出现歧义。