Won*_*nka 5 activerecord alias yii2
我正在使用Yii2框架和高级模板.
我的控制器文件中的列别名出现问题,这是我的代码:
$models = new ActiveDataProvider([
'query' => User::find()->select(['member'=>'fullname'])
]);
Run Code Online (Sandbox Code Playgroud)
以上查询等同于:
SELECT fullname AS member FROM User;
Run Code Online (Sandbox Code Playgroud)
我使用以下代码将数据发送到视图:
return $this->render('view', [
'model' => $models,
]);
Run Code Online (Sandbox Code Playgroud)
我想使用GridView小部件在我的视图中调用数据,这是我的代码:
echo GridView::widget([
'dataProvider' => $model,
'columns' => [
'member',
],
]);
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误,告诉我'member'参数没有定义.如何通过调用列名来显示查询数据?(在我的例子中,它使用别名)
我非常感谢任何帮助!!
您只需在模型中声明此属性:
class User extends ActiveRecord
{
public $member;
Run Code Online (Sandbox Code Playgroud)
阅读更多:https://www.yiiframework.com/doc/guide/2.0/en/db-active-record#selecting-extra-fields
ActiveDataProvider仅适用于模型属性。member显然没有在那里呈现。
首先,也许重构列名使其更清晰而不是编写别名更好?我没有看到你的例子有任何好处。
如果您仍然需要使用别名作为向类添加其他属性的替代方法,您可以在ArrayDataProvider和SqlDataProvider的帮助下使用它们。
使用示例:
数组数据提供者:
use yii\data\ArrayDataProvider;
$dataProvider = new ArrayDataProvider([
'allModels' => User::find()->select(['member' => 'fullname'])->all(),
]);
Run Code Online (Sandbox Code Playgroud)
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(),
]);
Run Code Online (Sandbox Code Playgroud)
更多详细信息和使用功能请参见官方文档。
对于您的情况,最好使用ArrayDataProvider,SqlDataProvider来进行更复杂的查询。
如果只有一个别名并使用模型方法,则添加soju建议的附加属性可能会更好。
但在我看来,这是没有用的,最好重构列名称,以防出现歧义。
| 归档时间: |
|
| 查看次数: |
12616 次 |
| 最近记录: |