/** * Used to recursively add contained association column types to * the query. * * @param \Cake\ORM\Table $table The table instance to pluck associations from. * @param \Cake\Database\TypeMap $typeMap The typemap to check for columns in. * This typemap is indirectly mutated via Cake\ORM\Query::addDefaultTypes() * @param array $associations The nested tree of associations to walk. * @return void */ protected function _addAssociationsToTypeMap($table, $typeMap, $associations) { foreach ($associations as $name => $nested) { $association = $table->association($name); if (!$association) { continue; } $target = $association->target(); $primary = (array) $target->primaryKey(); if (empty($primary) || $typeMap->type($target->aliasField($primary[0])) === null) { $this->addDefaultTypes($target); } if (!empty($nested)) { $this->_addAssociationsToTypeMap($target, $typeMap, $nested); } } }