public function applyOnEntity(Entity $entity) { $filters = $this->getAppliedFilters(); $signMapper = ['equals' => '=', 'greater' => '>', 'greaterOrEquals' => '>=', 'lower' => '<', 'lowerOrEquals' => '<=', 'not' => '!=', 'in' => 'IN', 'notIn' => 'NOT IN', 'like' => 'LIKE']; foreach ($filters as $filter) { if (!is_array($filter['value']) && in_array($filter['options']['method'], ['in', 'notIn'])) { $filter['value'] = explode(',', $filter['value']); } $entity->where($filter['field'], $filter['value'], $signMapper[$filter['options']['method']]); } $signMapper = ['equals' => '=', 'in' => 'IN', 'notIn' => 'NOT IN', 'not' => '!=']; $relationFilters = $this->getAppliedRelationFilters(); foreach ($relationFilters as $relationFilter) { $relation = (new Relations())->where('id', $relationFilter['id'])->one(); if ($relation->dynamic_relation_type_id == 1) { $entity->where($relation->onField->field, $relationFilter['value'], $signMapper[$relationFilter['options']['method']]); } else { if ($relation->dynamic_relation_type_id == 2) { $entity->join('INNER JOIN ' . $relation->showTable->table, $relation->onTable->table . '.id = ' . $relation->showTable->table . '.' . $relation->onField->field, $relation->showTable->table . '.' . $relationFilter['field'] . ' ' . $signMapper[$relationFilter['options']['method']] . ' ' . $entity->getRepository()->getConnection()->quote($relationFilter['value'])); } } } }