/** * Returns an array of constraints created from a given demand object. * * @param Tx_Extbase_Persistence_QueryInterface $query * @param Tx_News_Domain_Model_DemandInterface $demand * @return array<Tx_Extbase_Persistence_QOM_Constrain> */ protected function createConstraintsFromDemand(Tx_Extbase_Persistence_QueryInterface $query, Tx_News_Domain_Model_DemandInterface $demand) { $constraints = array(); // Storage page if ($demand->getStoragePage() != 0) { $pidList = t3lib_div::intExplode(',', $demand->getStoragePage(), TRUE); $constraints[] = $query->in('pid', $pidList); } // Clean not used constraints foreach ($constraints as $key => $value) { if (is_null($value)) { unset($constraints[$key]); } } return $constraints; }
/** * @test */ public function magicCallMethodAcceptsCountBySomethingCallsAndExecutesAQueryWithThatCriteria() { $mockQueryResult = $this->getMock('Tx_Extbase_Persistence_QueryResultInterface'); $mockQueryResult->expects($this->once())->method('count')->will($this->returnValue(2)); $this->mockQuery->expects($this->once())->method('equals')->with('foo', 'bar')->will($this->returnValue('matchCriteria')); $this->mockQuery->expects($this->once())->method('matching')->with('matchCriteria')->will($this->returnValue($this->mockQuery)); $this->mockQuery->expects($this->once())->method('execute')->will($this->returnValue($mockQueryResult)); $this->assertSame(2, $this->repository->countByFoo('bar')); }
/** * Loads the objects this QueryResult is supposed to hold * * @return void */ protected function initialize() { if (!is_array($this->queryResult)) { $this->queryResult = $this->dataMapper->map($this->query->getType(), $this->persistenceManager->getObjectDataByQuery($this->query)); } }
/** * Return the contrains * * @param Tx_Extbase_Persistence_QueryInterface $query The filter the references must apply to * @param Tx_Typo3Agencies_Domain_Model_Filter $filter The filter the references must apply to * @return array The references */ protected function getConstraints(Tx_Extbase_Persistence_QueryInterface $query, Tx_Typo3Agencies_Domain_Model_Filter $filter) { $constrains = array(); // Special case: remove certain type of record from the result set $_constrains = array(); $_constrains[] = $query->logicalNot($query->equals('first_name', '')); $_constrains[] = $query->logicalNot($query->equals('last_name', '')); $_constrains[] = $query->logicalNot($query->equals('name', '')); $constrains[] = $query->logicalOr($_constrains); // Membership case $members = $filter->getMembers(); if (!empty($members)) { $_constrains = array(); foreach ($members as $member) { $_constrains[] = $query->equals('member', $member); } $constrains[] = $query->logicalOr($_constrains); } else { // get all membershiptypes $constrains[] = $query->greaterThan('member', 0); } // Service case if ($filter->getTrainingService()) { $constrains[] = $query->equals('training_service', $filter->getTrainingService()); } if ($filter->getHostingService()) { $constrains[] = $query->equals('hosting_service', $filter->getHostingService()); } if ($filter->getDevelopmentService()) { $constrains[] = $query->equals('development_service', $filter->getDevelopmentService()); } // Country case if ($filter->getCountry()) { $constrains[] = $query->equals('country', $filter->getCountry()); } if ($filter->getFeUser()) { $constrains[] = $query->logicalOr($query->equals('administrator', $filter->getFeUser()), $query->logicalAnd($query->equals('approved', true), $query->logicalOr($query->equals('payed_until_date', 0), $query->greaterThanOrEqual('payed_until_date', time())))); } else { $constrains[] = $query->logicalAnd($query->equals('approved', true), $query->logicalOr($query->equals('payed_until_date', 0), $query->greaterThanOrEqual('payed_until_date', time()))); } return $constrains; }
/** * Parses the query and returns the SQL statement parts. * * @param Tx_Extbase_Persistence_QueryInterface $query The query * @return array The SQL statement parts */ public function parseQuery(Tx_Extbase_Persistence_QueryInterface $query, array &$parameters) { $sql = array(); $sql['keywords'] = array(); $sql['tables'] = array(); $sql['unions'] = array(); $sql['fields'] = array(); $sql['where'] = array(); $sql['additionalWhereClause'] = array(); $sql['orderings'] = array(); $sql['limit'] = array(); $source = $query->getSource(); $this->parseSource($source, $sql, $parameters); $this->parseConstraint($query->getConstraint(), $source, $sql, $parameters); $this->parseOrderings($query->getOrderings(), $source, $sql); $this->parseLimitAndOffset($query->getLimit(), $query->getOffset(), $sql); $tableNames = array_unique(array_keys($sql['tables'] + $sql['unions'])); foreach ($tableNames as $tableName) { if (is_string($tableName) && strlen($tableName) > 0) { $this->addAdditionalWhereClause($query->getQuerySettings(), $tableName, $sql); } } return $sql; }
/** * Builds and returns the constraint for multi value properties. * * @param Tx_Extbase_Persistence_QueryInterface $query * @param Tx_Extbase_DomainObject_DomainObjectInterface $parentObject * @param string $propertyName * @param string $fieldValue * @param array $relationTableMatchFields * @return Tx_Extbase_Persistence_QOM_ConstraintInterface $constraint */ protected function getConstraint(Tx_Extbase_Persistence_QueryInterface $query, Tx_Extbase_DomainObject_DomainObjectInterface $parentObject, $propertyName, $fieldValue = '', $relationTableMatchFields = array()) { $columnMap = $this->getDataMap(get_class($parentObject))->getColumnMap($propertyName); if ($columnMap->getParentKeyFieldName() !== NULL) { $constraint = $query->equals($columnMap->getParentKeyFieldName(), $parentObject); if ($columnMap->getParentTableFieldName() !== NULL) { $constraint = $query->logicalAnd($constraint, $query->equals($columnMap->getParentTableFieldName(), $this->getDataMap(get_class($parentObject))->getTableName())); } } else { $constraint = $query->in('uid', t3lib_div::intExplode(',', $fieldValue)); } if (count($relationTableMatchFields) > 0) { foreach ($relationTableMatchFields as $relationTableMatchFieldName => $relationTableMatchFieldValue) { $constraint = $query->logicalAnd($constraint, $query->equals($relationTableMatchFieldName, $relationTableMatchFieldValue)); } } return $constraint; }
/** * Returns a category constraint created by * a given list of categories and a junction string * * @param Tx_Extbase_Persistence_QueryInterface $query * @param array $categories * @param string $conjunction * @param boolean $includeSubCategories * @return Tx_Extbase_Persistence_QOM_Constraint|null */ protected function createCategoryConstraint(Tx_Extbase_Persistence_QueryInterface $query, $categories, $conjunction, $includeSubCategories = FALSE) { $constraint = NULL; $categoryConstraints = array(); // If "ignore category selection" is used, nothing needs to be done if (empty($conjunction)) { return $constraint; } if (!is_array($categories)) { $categories = t3lib_div::intExplode(',', $categories, TRUE); } foreach ($categories as $category) { if ($includeSubCategories) { $subCategories = t3lib_div::trimExplode(',', Tx_News_Service_CategoryService::getChildrenCategories($category, 0, '', TRUE), TRUE); $subCategoryConstraint = array(); $subCategoryConstraint[] = $query->contains('categories', $category); if (count($subCategories) > 0) { foreach ($subCategories as $subCategory) { $subCategoryConstraint[] = $query->contains('categories', $subCategory); } } if ($subCategoryConstraint) { $categoryConstraints[] = $query->logicalOr($subCategoryConstraint); } } else { $categoryConstraints[] = $query->contains('categories', $category); } } if ($categoryConstraints) { switch (strtolower($conjunction)) { case 'or': $constraint = $query->logicalOr($categoryConstraints); break; case 'notor': $constraint = $query->logicalNot($query->logicalOr($categoryConstraints)); break; case 'notand': $constraint = $query->logicalNot($query->logicalAnd($categoryConstraints)); break; case 'and': default: $constraint = $query->logicalAnd($categoryConstraints); } } return $constraint; }