/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $exprs = []; foreach ($filter->getCondition() as $column => $value) { if ($filter->isExactSearch()) { $exprs[] = Criteria::expr()->eq($column, $value); continue; } if ($filter->hasSplitWordsSearch() === FALSE) { $words = [$value]; } else { $words = explode(' ', $value); } foreach ($words as $word) { $exprs[] = Criteria::expr()->contains($column, $word); } } $expr = call_user_func_array([Criteria::expr(), 'orX'], $exprs); $this->criteria->andWhere($expr); }
/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $or = []; $args = []; $big_or = '('; $big_or_args = []; $condition = $filter->getCondition(); foreach ($condition as $column => $value) { $like = '('; $args = []; if ($filter->isExactSearch()) { $like .= "{$column} = ? OR "; $args[] = "{$value}"; } else { if ($filter->hasSplitWordsSearch() === FALSE) { $words = [$value]; } else { $words = explode(' ', $value); } foreach ($words as $word) { $like .= "{$column} LIKE ? OR "; $args[] = "%{$word}%"; } } $like = substr($like, 0, strlen($like) - 4) . ')'; $or[] = $like; $big_or .= "{$like} OR "; $big_or_args = array_merge($big_or_args, $args); } if (sizeof($or) > 1) { $big_or = substr($big_or, 0, strlen($big_or) - 4) . ')'; $query = array_merge([$big_or], $big_or_args); call_user_func_array([$this->data_source, 'where'], $query); } else { $query = array_merge($or, $args); call_user_func_array([$this->data_source, 'where'], $query); } }
/** * Filter by keyword * @param Filter\FilterText $filter * @return void */ public function applyFilterText(Filter\FilterText $filter) { $condition = $filter->getCondition(); $expr = '('; $params = []; foreach ($condition as $column => $value) { if ($filter->isExactSearch()) { $expr .= "%column = %s OR "; $params[] = $column; $params[] = "{$value}"; continue; } if ($filter->hasSplitWordsSearch() === FALSE) { $words = [$value]; } else { $words = explode(' ', $value); } foreach ($words as $word) { $expr .= "%column LIKE %s OR "; $params[] = $column; $params[] = "%{$word}%"; } } $expr = preg_replace('/ OR $/', ')', $expr); array_unshift($params, $expr); call_user_func_array([$this->data_source->getQueryBuilder(), 'andWhere'], $params); }
/** * Filter by keyword * @param Filter\FilterText $filter */ public function applyFilterText(Filter\FilterText $filter) { $condition = $filter->getCondition(); $exprs = []; foreach ($condition as $column => $value) { if ($filter->hasSplitWordsSearch() === FALSE) { $words = [$value]; } else { $words = explode(' ', $value); } $c = $this->checkAliases($column); foreach ($words as $word) { $exprs[] = $this->data_source->expr()->like($c, $this->data_source->expr()->literal("%{$word}%")); } } $or = call_user_func_array([$this->data_source->expr(), 'orX'], $exprs); $this->data_source->andWhere($or); }