/**
  * Returns the SQL fragment needed to filter where a column equals a given value.
  *
  * @param \Rhubarb\Stem\Repositories\Repository $repository
  * @param \Rhubarb\Stem\Filters\Equals|Filter $originalFilter
  * @param array $params
  * @param array $relationshipsToAutoHydrate
  * @return string|void
  */
 protected static function doFilterWithRepository(Repository $repository, Filter $originalFilter, &$params, &$relationshipsToAutoHydrate)
 {
     $columnName = $originalFilter->columnName;
     if (self::canFilter($repository, $columnName, $relationshipsToAutoHydrate)) {
         $paramName = uniqid() . str_replace(".", "", $columnName);
         $placeHolder = $originalFilter->detectPlaceHolder($originalFilter->greaterThan);
         $originalFilter->filteredByRepository = true;
         if (!$placeHolder) {
             $params[$paramName] = self::getTransformedComparisonValueForRepository($columnName, $originalFilter->greaterThan, $repository);
             $paramName = ":" . $paramName;
         } else {
             $paramName = $placeHolder;
         }
         if (strpos($columnName, ".") === false) {
             $schema = $repository->getSchema();
             $columnName = $schema->schemaName . "`.`" . $columnName;
         } else {
             $columnName = str_replace('.', '`.`', $columnName);
         }
         if ($originalFilter->inclusive) {
             return "`{$columnName}` >= {$paramName}";
         } else {
             return "`{$columnName}` > {$paramName}";
         }
     }
     parent::doFilterWithRepository($repository, $originalFilter, $object, $params);
 }
Example #2
0
 /**
  * Returns the SQL fragment needed to filter where a column equals a given value.
  *
  * @param \Rhubarb\Stem\Repositories\Repository $repository
  * @param Equals|Filter $originalFilter
  * @param array $params
  * @param array $relationshipsToAutoHydrate
  * @return string|void
  */
 protected static function doFilterWithRepository(Repository $repository, Filter $originalFilter, &$params, &$relationshipsToAutoHydrate)
 {
     $columnName = $originalFilter->columnName;
     if (self::canFilter($repository, $columnName, $relationshipsToAutoHydrate)) {
         $queryColumnName = $columnName;
         if (strpos($queryColumnName, ".") === false) {
             $schema = $repository->getSchema();
             $queryColumnName = $schema->schemaName . "`.`" . $queryColumnName;
         } else {
             $queryColumnName = str_replace('.', '`.`', $queryColumnName);
         }
         if ($originalFilter->equalTo === null) {
             return "`{$queryColumnName}` IS NULL";
         }
         $paramName = uniqid() . str_replace(".", "", $columnName);
         $originalFilter->filteredByRepository = true;
         $placeHolder = $originalFilter->detectPlaceHolder($originalFilter->equalTo);
         if (!$placeHolder) {
             $params[$paramName] = $params[$paramName] = self::getTransformedComparisonValueForRepository($columnName, $originalFilter->equalTo, $repository);
             $paramName = ":" . $paramName;
         } else {
             $paramName = $placeHolder;
         }
         return "`{$queryColumnName}` = {$paramName}";
     }
 }
Example #3
0
 protected static function doFilterWithRepository(Repository $repository, Filter $originalFilter, &$params, &$propertiesToAutoHydrate)
 {
     $filters = $originalFilter->getFilters();
     $filterSql = [];
     foreach ($filters as $filter) {
         $thisFilterSql = $filter->filterWithRepository($repository, $params, $propertiesToAutoHydrate);
         if ($thisFilterSql != "") {
             $filterSql[] = $thisFilterSql;
         }
     }
     if (sizeof($filterSql) > 0) {
         return "( " . implode(" " . $originalFilter->booleanType . " ", $filterSql) . " )";
     }
     return "";
 }
 public function getTransformFromRepository()
 {
     return function ($data) {
         $value = json_decode($data[$this->columnName], true);
         return Filter::speciateFromSettingsArray($value);
     };
 }
Example #5
0
 /**
  * append a model to the list and correctly set any fields required to make this re-fetchable through the same list.
  *
  * @param \Rhubarb\Stem\Models\Model $model
  * @return \Rhubarb\Stem\Models\Model|null
  */
 public function append(Model $model)
 {
     $result = null;
     // If the list was filtered make sure that value is set on the model.
     if ($this->filter !== null) {
         $result = $this->filter->setFilterValuesOnModel($model);
     }
     $model->save();
     // Make sure the list has been fetched so we can pop the unique identifier on the end.
     if ($this->fetched) {
         $this->uniqueIdentifiers[] = $model->UniqueIdentifier;
     }
     return $result === null ? $model : $result;
 }
 public function getSettingsArray()
 {
     $settings = parent::getSettingsArray();
     $settings["columnName"] = $this->columnName;
     return $settings;
 }