两个连接字段作为valueField

时间:2018-02-27 13:59:39

标签: php cakephp join field

我正在尝试将两个连接字段组合为下拉组合中的valueField。 检查https://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html#finding-key-value-pairsHow do I create a keyValue pair (display field) by combining/having two fields in CakePHP 3?后,我尝试了以下操作:

这有效:

$authorities = $this->Books->Authorities->find('list', [
            'valueField' => 'author.name'])
            ->contain(['Authors', 'AuthorTypes']);

这也有效:

$authorities = $this->Books->Authorities->find('list', [
            'valueField' => 'author_type.name'])
            ->contain(['Authors', 'AuthorTypes']);

但这并不是

$authorities = $this->Books->Authorities->find('list', [
            'valueField' => function ($row) {
                return $row['author.name'] . ' - ' . $row['author_type.name'];
            }])
        ->contain(['Authors', 'AuthorTypes']);

我无法理解为什么。有任何想法吗? :)

1 个答案:

答案 0 :(得分:1)

根据建议的其中一条评论,请按照examples

进行操作

您的代码应为:

$authorities = $this->Books->Authorities->find('list', [
            'valueField' => function ($row) {
                return $row->author->name . ' - ' . $row->author->name;
            }])
            ->contain(['Authors', 'AuthorTypes']);

这称为Customize Key-Value Output。 $ row参数是一个对象而不是一个简单的array_object。