我正在尝试使用此人的全名在Yii2中填充下拉列表,第一个和最后一个名称在我的数据库的不同列中.
在我的人员表中
...
在我的Person.php模型中,我有
public function getFullName()
{
return $this->first_name . ' ' . $this->last_name;
}
Run Code Online (Sandbox Code Playgroud)
这是我的帮助函数,以获取GridViews中的全名并正常工作.但是我在填充下拉列表时遇到了麻烦.
// Get person
$person = Person::find()
->orderBy('last_name')
->asArray()
->all();
// Person drop down
$personMap = ArrayHelper::map($person, 'fullName', 'dep_id');
Run Code Online (Sandbox Code Playgroud)
我没有在下拉列表中得到任何内容,但人员ID是正确的.那么我怎么需要正确地解决这个问题呢?
你不能这样使用ArrayHelper::map(),因为fullName它没有出现在模型属性中.
但您可以指定闭包而不是属性名称来实现所需的结果:
$person = Person::find()
->orderBy('last_name')
->all();
$personMap = ArrayHelper::map(
$person,
function ($person, $defaultValue) {
return $person->getFullName();
}
'dep_id'
);
Run Code Online (Sandbox Code Playgroud)
如果您申请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'
);
Run Code Online (Sandbox Code Playgroud)
我不建议使用它,因为它是重复获取全名的逻辑.
至于细节:在map()方法$from和$to参数getValue()方法中都会调用().如果您查看该方法的官方文档,您会发现一些指定$key为闭包的示例.
通常也会形成这样的列表,反之亦然:由ids索引的字符串变量.
在这种情况下,您可以将其传递$items给显示下拉列表.
在您的情况下,当模型集包含至少两个具有完全相同名称的人时,可能会出现一些问题.
要改变它只需切换第二个和第三个参数.