尝试在我的find方法中使用多个字段 -
$users = $this->AdressesUsers->users->find('list', [
'keyField' => 'id',
'valueField' => ['firstname','lastname'],
]);
工作,有点。因为这两个分号是分开的。也尝试使用mutator方法,但这种情况很糟糕。
在我的功能
中'valueField' => function ($e) {
return $e->author->get('full_name');
}
在我的实体用户中
protected function _getFullName()
{
return $this->firstname . ' ' . $this->lastname;
}
答案 0 :(得分:2)
我永远不会搞乱实体,保持它没有逻辑,尽可能简单。
这里更好的方法是使用你已经尝试过的东西:
'valueField' => function ($e) {
return $e->first_name . ' ' . $e->last_name . ' ' . $e->more;
}
等 只需在这里调试()实体,你会看到它包含整个数据集,你可以把它放在一起,无论你喜欢什么。
答案 1 :(得分:1)
我建议你在这里使用Queries As Collection Objects。 试试这个:
$users = $this->AdressesUsers->Users->find()
->map(function ($row) { // map() is a collection method, it executes the query
$row->fullName = $row->firstname . ' ' . $row->lastname;
return $row;
})
->combine('id', 'fullName') // combine() is another collection method
->toArray(); // Also a collections library method
pr($users); // Check your result
答案 2 :(得分:1)
你可以像普通字段一样使用虚拟字段,
$this->AdressesUsers->users->find('list', [
'keyField' => 'id',
'valueField' => function ($e) {
return $e->full_name;
}
]);
其他强> 你也可以在valueField中返回数组,
$this->AdressesUsers->users->find('list', [
'keyField' => 'id',
'valueField' => function ($e) {
$d=[];
$d['firstname'] = $e->firstname;
$d['lastname'] = $e->lastname;
return $d;
}
]);