/** * @test */ public function testLaravelTransformer() { $selectQuery = new SelectQueryParameters(); $selectQuery->where((new WhereParameter('foo', Operator::EQ, 'bar'))->or((new WhereParameter('bar', Operator::LT, 15))->and(new WhereParameter('cat', Operator::NEQ, 'catlab')))); $builder = $this->getQueryBuilder(); SelectQueryTransformer::toLaravel($builder, $selectQuery); $this->assertEquals('select * from "table" where "foo" = ? or ("bar" < ? and ("cat" != ?))', $builder->toSql()); }
/** * @param $request * @param $resourceDefinition * @param ContextContract $context * @param int $records * @return SelectQueryParameters */ public function getFilters($request, $resourceDefinition, Context $context, int $records = 10) { $definition = ResourceDefinitionLibrary::make($resourceDefinition); $queryBuilder = new SelectQueryParameters(); // Now check for query parameters foreach ($definition->getFields() as $field) { if ($field instanceof ResourceField && $field->isFilterable()) { $parameter = $this->propertyResolver->getParameterFromRequest($request, $field->getDisplayName()); if ($parameter) { $queryBuilder->where(new WhereParameter($field->getName(), Operator::EQ, $parameter)); } } } // Processors $context->getProcessors()->processFilters($this, $queryBuilder, $request, $definition, $context, $records); return $queryBuilder; }
/** * @param SelectQueryParameters $queryBuilder * @return SelectQueryParameters */ public function build(SelectQueryParameters $queryBuilder = null) { if (!isset($queryBuilder)) { $queryBuilder = new SelectQueryParameters(); } if ($this->records) { $queryBuilder->limit(new LimitParameter($this->records)); } if (isset($this->after)) { $where = $this->processCursor($this->after, self::REQUEST_PARAM_AFTER); $queryBuilder->where($where); } if (isset($this->before)) { $this->invertOrder = true; $where = $this->processCursor($this->before, self::REQUEST_PARAM_BEFORE); $queryBuilder->where($where); } foreach ($this->sort as $sort) { $dir = $sort->getDirection(); if ($this->invertOrder) { $dir = OrderParameter::invertDirection($dir); } $queryBuilder->orderBy(new OrderParameter($sort->getColumn(), $dir)); } $queryBuilder->reverse($this->invertOrder); return $queryBuilder; }