Example #1
0
 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']));
             }
         }
     }
 }