Cakephp 如何选择包含关联的字段?

Cakephp 如何选择包含关联的字段?,cakephp,select,query-builder,cakephp-3.x,Cakephp,Select,Query Builder,Cakephp 3.x,我想执行下面的查询,在这里我只想从关联数据库中读取必要的字段。 我在下面的选择中使用了点符号来更好地解释我想要什么。 基本上,select似乎只关注用户。是否可以指定站点的字段 您必须单独配置容器,为其他容器选择字段将不起作用 确切地说,除了相应的包含配置之外,您不能从其他任何地方为包含选择字段,除了使用联接策略的belongsTo/hasOne关联之外,可以在直接父查询的select调用中选择它们的字段,因为这些关联将通过该查询中的联接进行检索 例如,如果站点是belongsTo关联,则可以通

我想执行下面的查询,在这里我只想从关联数据库中读取必要的字段。 我在下面的选择中使用了点符号来更好地解释我想要什么。 基本上,select似乎只关注用户。是否可以指定站点的字段


您必须单独配置容器,为其他容器选择字段将不起作用

确切地说,除了相应的包含配置之外,您不能从其他任何地方为包含选择字段,除了使用联接策略的belongsTo/hasOne关联之外,可以在直接父查询的select调用中选择它们的字段,因为这些关联将通过该查询中的联接进行检索

例如,如果站点是belongsTo关联,则可以通过select call on Orders为其选择字段。如果用户是belongsTo,但站点有很多,那么您可以使用selectcallforsites为用户选择字段

也就是说,在您的示例中,您可以使用queryBuilder选项在嵌套数组结构中定义回调

contain([
    'Sites' => [
        'queryBuilder' => function ($q) {
            return $q
                ->select([
                    'Sites.id',
                    'Sites.user_id'
                ]);
        },
        'Users' => function ($q) {
            return $q
                ->select([
                    'Users.id',
                    'Users.name',
                    'Users.owner_id',
                    'Users.firstname',
                    'Users.lastname'
                ]);
        }
    ]
])
或者,如果您实际上不需要查询生成器,请使用“字段”选项

另见


您必须单独配置容器,为其他容器选择字段将不起作用

确切地说,除了相应的包含配置之外,您不能从其他任何地方为包含选择字段,除了使用联接策略的belongsTo/hasOne关联之外,可以在直接父查询的select调用中选择它们的字段,因为这些关联将通过该查询中的联接进行检索

例如,如果站点是belongsTo关联,则可以通过select call on Orders为其选择字段。如果用户是belongsTo,但站点有很多,那么您可以使用selectcallforsites为用户选择字段

也就是说,在您的示例中,您可以使用queryBuilder选项在嵌套数组结构中定义回调

contain([
    'Sites' => [
        'queryBuilder' => function ($q) {
            return $q
                ->select([
                    'Sites.id',
                    'Sites.user_id'
                ]);
        },
        'Users' => function ($q) {
            return $q
                ->select([
                    'Users.id',
                    'Users.name',
                    'Users.owner_id',
                    'Users.firstname',
                    'Users.lastname'
                ]);
        }
    ]
])
或者,如果您实际上不需要查询生成器,请使用“字段”选项

另见

contain([
    'Sites' => [
        'fields' => [
            'Sites.id',
            'Sites.user_id'
        ],
        'Users' => [
            'fields' => [
                'Users.id',
                'Users.name',
                'Users.owner_id',
                'Users.firstname',
                'Users.lastname'
            ]
        ]
    ]
])