Yii2带全名的下拉列表
我试图在Yii2中填充一个下拉列表,其中包含此人的全名,名字和姓氏在我的数据库中的不同列中 在我个人的桌子上Yii2带全名的下拉列表,yii2,Yii2,我试图在Yii2中填充一个下拉列表,其中包含此人的全名,名字和姓氏在我的数据库中的不同列中 在我个人的桌子上 身份证 名字 姓 副局长(fk) 在我的Person.php模型中 public function getFullName() { return $this->first_name . ' ' . $this->last_name; } 这是我的助手函数,用于在GridView中获取全名,工作正常。但是我在填充下拉列表时遇到了问题 // Get per
- 身份证
- 名字
- 姓
- 副局长(fk)
public function getFullName()
{
return $this->first_name . ' ' . $this->last_name;
}
这是我的助手函数,用于在GridView中获取全名,工作正常。但是我在填充下拉列表时遇到了问题
// Get person
$person = Person::find()
->orderBy('last_name')
->asArray()
->all();
// Person drop down
$personMap = ArrayHelper::map($person, 'fullName', 'dep_id');
这样,我在下拉列表中什么也得不到,但是个人ID是正确的。那么,我需要如何正确地执行此操作呢?您不能像那样使用
ArrayHelper::map()
,因为全名
不显示在模型属性中
但您可以指定闭包而不是属性名称,以获得所需的结果:
$person = Person::find()
->orderBy('last_name')
->all();
$personMap = ArrayHelper::map(
$person,
function ($person, $defaultValue) {
return $person->getFullName();
}
'dep_id'
);
如果应用asArray()
,将无法调用模型方法,但仍可以包含全名,如下所示:
$person = Person::find()
->orderBy('last_name')
->asArray()
->all();
$personMap = ArrayHelper::map(
$person,
function ($person, $defaultValue) {
return $person['first_name'] . ' ' . $person['last_name'];
}
'dep_id'
);
我不建议使用它,因为它重复了获取全名的逻辑
至于细节:在map()
中,将调用$from
和$to
参数的getValue()
方法()。如果您检查该方法,您将发现一些将$key
指定为闭包的示例
通常这样的列表也是由ID索引的字符串变量组成的,反之亦然
在这种情况下,您可以将其作为$items
传递以进行显示
在您的例子中,当模型集至少包含两个名字完全相同的人时,可能会出现一些问题
若要更改,只需切换第二个和第三个参数。//使用yii\helpers\ArrayHelper;
//use yii\helpers\ArrayHelper;
//use app\models\Users;
//replace lastname with field you want to order by in your database table
$person = Users::find()
->orderBy('LastName')
->all();
$personMap = ArrayHelper::map(
$person,'UserID',
function ($person, $defaultValue)
{
return $person->getFullName();
}
);
?>
//replace UserID
<?= $form->field($model, 'UserID')->dropDownList(
$personMap, ['prompt'=>'[--select person--]',
])
?>
//get getFullname function should placed in your model
function getFullName()
{
return $this->FirstName."".$this->LastName;
}
//Firstname and lastname are the fields in your database
//使用app\models\Users;
//将lastname替换为数据库表中要排序的字段
$person=Users::find()
->orderBy('LastName')
->全部();
$personMap=ArrayHelper::map(
$person,'UserID',
函数($person$defaultValue)
{
返回$person->getFullName();
}
);
?>
//替换用户ID
//get getFullname函数应该放在模型中
函数getFullName()
{
返回$this->FirstName。“$this->LastName;
}
//Firstname和lastname是数据库中的字段