在 Yii2 中无法在 gridview 中显示来自模型的自定义列
In Yii2 Unable to show custom column from model in gridview
下面是我在 UserSearch 模型的搜索功能中使用的数据提供者查询,它是从 User 模型扩展而来的。我试图在 gridview 中显示 'entries' 的值,但无法访问列 'entries'。请帮忙。
$query = User::find()
->select("users.Id, users.FirstName, users.LastName, users.EntryId, GROUP_CONCAT(entry.EntryId ORDER BY entry.Id SEPARATOR '<br>') as entries")
->join('LEFT OUTER JOIN','entry','entry.CustomerEntryId = users.EntryId')
->where(['users.IsActive' =>1])
->groupBy('users.Id');
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
用户模型代码
class User extends \yii\db\ActiveRecord
{
public $password_repeat;
public static function tableName()
{
return 'users';
}
public function rules()
{
return [
[['FirstName','LastName','EmailId','MobileNo','Password','password_repeat'], 'required'],
['EmailId', 'email'],
[['EmailId'], 'unique'],
['password_repeat', 'compare', 'compareAttribute'=>'Password', 'message'=>"Passwords don't match", ],
['MobileNo', 'is8NumbersOnly'],
];
}
public function is8NumbersOnly($attribute)
{
if (!preg_match('/^[0-9]{8}$/', $this->$attribute)) {
$this->addError($attribute, 'must contain exactly 8 digits.');
}
}
}
GridView 代码
echo GridView::widget([
'dataProvider'=>$dataProvider,
'filterModel'=>$searchModel,
'showPageSummary'=>true,
'pjax'=>true,
'striped'=>true,
],
'panel'=>['type'=>'primary', 'heading'=>'Members Report'],
'columns' => [
[
'label'=>'First Name',
'attribute'=>'FirstName',
'value'=>'FirstName',
],
[
'label'=>'Email Id',
'attribute'=>'EmailId',
'value'=>'EmailId',
],
[
'label'=>'Entries',
'attribute'=>'Entries',
'value'=>'entries',
],
],
]);
管理计算列的简单方法是在模型中添加一个 public var class(在本例中为用户模型)
class User extends \yii\db\ActiveRecord
{
public $entries
然后在您的 gridview 中,您可以简单地将此名称添加到列中
'columns' => [
['class' => 'yii\grid\SerialColumn'],
....
'entries',
.....
下面是我在 UserSearch 模型的搜索功能中使用的数据提供者查询,它是从 User 模型扩展而来的。我试图在 gridview 中显示 'entries' 的值,但无法访问列 'entries'。请帮忙。
$query = User::find()
->select("users.Id, users.FirstName, users.LastName, users.EntryId, GROUP_CONCAT(entry.EntryId ORDER BY entry.Id SEPARATOR '<br>') as entries")
->join('LEFT OUTER JOIN','entry','entry.CustomerEntryId = users.EntryId')
->where(['users.IsActive' =>1])
->groupBy('users.Id');
$dataProvider = new ActiveDataProvider([
'query' => $query,
]);
用户模型代码
class User extends \yii\db\ActiveRecord
{
public $password_repeat;
public static function tableName()
{
return 'users';
}
public function rules()
{
return [
[['FirstName','LastName','EmailId','MobileNo','Password','password_repeat'], 'required'],
['EmailId', 'email'],
[['EmailId'], 'unique'],
['password_repeat', 'compare', 'compareAttribute'=>'Password', 'message'=>"Passwords don't match", ],
['MobileNo', 'is8NumbersOnly'],
];
}
public function is8NumbersOnly($attribute)
{
if (!preg_match('/^[0-9]{8}$/', $this->$attribute)) {
$this->addError($attribute, 'must contain exactly 8 digits.');
}
}
}
GridView 代码
echo GridView::widget([
'dataProvider'=>$dataProvider,
'filterModel'=>$searchModel,
'showPageSummary'=>true,
'pjax'=>true,
'striped'=>true,
],
'panel'=>['type'=>'primary', 'heading'=>'Members Report'],
'columns' => [
[
'label'=>'First Name',
'attribute'=>'FirstName',
'value'=>'FirstName',
],
[
'label'=>'Email Id',
'attribute'=>'EmailId',
'value'=>'EmailId',
],
[
'label'=>'Entries',
'attribute'=>'Entries',
'value'=>'entries',
],
],
]);
管理计算列的简单方法是在模型中添加一个 public var class(在本例中为用户模型)
class User extends \yii\db\ActiveRecord
{
public $entries
然后在您的 gridview 中,您可以简单地将此名称添加到列中
'columns' => [
['class' => 'yii\grid\SerialColumn'],
....
'entries',
.....