Php 将两个字段连接为valueField

Php 将两个字段连接为valueField,php,cakephp,join,field,Php,Cakephp,Join,Field,我正在尝试将两个联接字段合并为下拉组合中的valueField。 检查后,我尝试了以下方法: 这是有效的: $authorities = $this->Books->Authorities->find('list', [ 'valueField' => 'author.name']) ->contain(['Authors', 'AuthorTypes']); $authorities = $this->Boo

我正在尝试将两个联接字段合并为下拉组合中的valueField。 检查后,我尝试了以下方法:

这是有效的:

$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']);
这也有效:

$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']);
但这不是:

$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']);

我不明白为什么。有什么想法吗?:)

作为建议的评论之一,请遵循以下内容

您的代码应该是:

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

这称为
自定义键值输出
。$row参数是一个对象,而不是一个简单的数组对象。

下面的示例应该是
$row->author->name
我必须是盲的…因为即使现在我也看不到它是同一个示例^\u^!