/** * load the query object for a hasManyToMany relationship * * @param \PhalconRest\API\Relation $relation * @return multitype:array */ protected function getHasManyToManyRecords($relation) { $refModelNameSpace = $relation->getReferencedModel(); $intermediateModelNameSpace = $relation->getIntermediateModel(); // determine the key to search against $field = $relation->getFields(); $config = $this->getDI()->get('config'); $modelNameSpace = $config['namespaces']['models']; $mm = $this->getDI()->get('modelsManager'); $query = $mm->createBuilder()->from($intermediateModelNameSpace)->join($refModelNameSpace); $columns = array(); // join in parent record if one is detected $parentName = $relation->getParent(); if ($parentName) { $columns[] = "{$parentName}.*"; $intField = $relation->getIntermediateReferencedFields(); $query->join($modelNameSpace . $parentName, "{$parentName}.{$field} = {$refModelNameSpace}.{$intField}", $parentName); } // Load the main record field at the end, so they are not overwritten $columns[] = $refModelNameSpace . ".*, " . $intermediateModelNameSpace . ".*"; $query->columns($columns); if (isset($this->baseRecord[$field])) { $fieldValue = $this->baseRecord[$field]; } else { // fall back to using the primaryKeyValue $fieldValue = $this->primaryKeyValue; } $whereField = $intermediateModelNameSpace . '.' . $relation->getIntermediateFields(); $query->where("{$whereField} = \"{$fieldValue}\""); $result = $query->getQuery()->execute(); return $this->loadRelationRecords($result, $relation); }