コード例 #1
0
 /**
  * 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);
 }