public function testBuildWhereStatement() { $condition = new Condition(); $condition->add('testColumn', 11); $condition2 = new Condition(ConditionInterface::DISJUNCTION); $condition2->add('testColumn2', ['test', 'test2', 'test3']); $condition2->add('testColumn3', 'test', ArgumentInterface::NOT_EQUAL); $condition2->add('testColumn3', 'test', ArgumentInterface::NOTNULL); $condition2->add('testColumn3 = "test"', '', ArgumentInterface::OWN); $condition2->add('testColumn', [1, 2], ArgumentInterface::NOT_EQUAL); $condition->addCondition($condition2); static::assertEquals('(testColumn = 11) AND ((testColumn2 IN ("test","test2","test3")) OR (testColumn3 != "test") OR (testColumn3 IS NOT NULL) OR (testColumn3 = "test") OR (testColumn NOT IN (1,2)))', $this->sqlBuilder->buildWhereStatement($this->metadata, $condition)); }
/** * @param array $entityIDs * * @return array */ protected function applySearch(array $entityIDs) { $condition = new Condition(ConditionInterface::DISJUNCTION); foreach ($this->searchFilter as $searchText) { foreach (static::$fieldValueColumns as $fieldId => $fieldColumn) { $condition->addCondition((new Condition())->addArgument(new Argument($fieldColumn, '%' . $searchText . '%', ArgumentInterface::LIKE))->addArgument(new Argument(\samsoncms\api\MaterialField::F_FIELDID, $fieldId))); } } return $this->query->entity(\samsoncms\api\MaterialField::class)->whereCondition($condition)->where(Material::F_PRIMARY, $entityIDs)->fields(Material::F_PRIMARY); }
/** * Build correct localized field request for retrieving additional fields records. * * @param Field[] $fields Collection of additional fields * * @return Condition Built condition for query */ protected function fieldsCondition($fields) { // Group fields by localization $localizedColumns = array(); $notLocalizedColumns = array(); /** @var Field $field Iterate table columns(fields) */ foreach ($fields as $field) { if ($field->localized()) { $localizedColumns[] = $field->id; } else { $notLocalizedColumns[] = $field->id; } } // Create field condition $fieldsCondition = new Condition(ConditionInterface::DISJUNCTION); // Create localized condition if (count($localizedColumns)) { $localizedCondition = new Condition(ConditionInterface::CONJUNCTION); $localizedCondition->add(Field::F_PRIMARY, $localizedColumns)->add(MaterialField::F_LOCALE, $this->locale); // Add this condition to condition group $fieldsCondition->addCondition($localizedCondition); } // Create not localized condition if (count($notLocalizedColumns)) { $fieldsCondition->add(Field::F_PRIMARY, $notLocalizedColumns); } return $fieldsCondition; }