protected static function canAggregateInMySql(Repository $repository, $columnName, &$relationshipsToAutoHydrate)
 {
     $schema = $repository->getSchema();
     $columns = $schema->getColumns();
     if (isset($columns[$columnName])) {
         return true;
     }
     if (strpos($columnName, ".") !== false) {
         // If the column name contains a dot, the part before the dot is the name of a relationship to another model
         list($relationship, $columnName) = explode(".", $columnName, 2);
         $relationships = SolutionSchema::getAllRelationshipsForModel($repository->getModelClass());
         // Check for the name being that of a relationship
         if (isset($relationships[$relationship]) && $relationships[$relationship] instanceof OneToMany) {
             $targetModelName = $relationships[$relationship]->getTargetModelName();
             $targetSchema = SolutionSchema::getModelSchema($targetModelName);
             $targetColumns = $targetSchema->getColumns();
             // Check for the column name in the schema of the related model
             if (isset($targetColumns[$columnName])) {
                 $relationshipsToAutoHydrate[] = $relationship;
                 return true;
             }
         }
     }
     return false;
 }
 protected static function doFilterWithRepository(Repository $repository, Filter $originalFilter, &$params, &$relationshipsToAutoHydrate)
 {
     $relationshipsToAutoHydrate[] = $originalFilter->collectionProperty;
     // Get the relationship
     $relationships = SolutionSchema::getAllRelationshipsForModel($repository->getModelClass());
     /**
      * @var OneToMany $relationship
      */
     $relationship = $relationships[$originalFilter->collectionProperty];
     $columnName = $relationship->getNavigationPropertyName() . "`.`" . $originalFilter->columnName;
     $paramName = uniqid() . str_replace("`.`", "", $columnName);
     $params[$paramName] = $originalFilter->equalTo;
     $originalFilter->filteredByRepository = true;
     return "`{$columnName}` = :{$paramName}";
 }
Пример #3
0
 protected static final function getTransformedComparisonValueForRepository($columnName, $rawComparisonValue, Repository $repository)
 {
     $exampleObject = SolutionSchema::getModel($repository->getModelClass());
     $columnSchema = $exampleObject->getColumnSchemaForColumnReference($columnName);
     if ($columnSchema != null) {
         // Transform the value first into model data. This function should sanitise the value as
         // the model data transforms expect inputs passed by unwary developers.
         $closure = $columnSchema->getTransformIntoModelData();
         if ($closure !== null) {
             $rawComparisonValue = $closure($rawComparisonValue);
         }
         $closure = $columnSchema->getTransformIntoRepository();
         if ($closure !== null) {
             $rawComparisonValue = $closure($rawComparisonValue);
         }
     }
     return $rawComparisonValue;
 }