在find('list')

时间:2016-10-06 20:31:37

标签: cakephp find cakephp-3.x

尝试在我的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;
    }

3 个答案:

答案 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;
    }
]);