/** * Translates a custom field name to field_id_x and performs a where like/regexp query * * @param \Illuminate\Database\Eloquent\Builder $query * @param string $fieldName * @param mixed $value * @param string $boolean * @param bool $not * @param bool $wholeWord * @return \Illuminate\Database\Eloquent\Builder */ protected function scopeWhereFieldContainsHandler(Builder $query, $fieldName, $value, $boolean = 'and', $not = false, $wholeWord = false) { if ($value) { $operator = $not ? 'not ' : ''; if ($wholeWord) { $operator .= 'regexp'; $value = '([[:<:]]|^)' . preg_quote($value) . '([[:>:]]|$)'; if (self::$fieldRepository->hasField($fieldName)) { $column = 'field_id_' . self::$fieldRepository->getFieldId($fieldName); $method = $boolean === 'and' ? 'whereRaw' : 'orWhereRaw'; $tablePrefix = $query->getQuery()->getConnection()->getTablePrefix(); $query->{$method}("`{$tablePrefix}channel_data`.`{$column}` {$operator} '{$value}'"); } } else { $operator .= 'like'; $value = '%' . $value . '%'; $this->scopeWhereFieldHandler($query, 'where', array($fieldName, $operator, $value, $boolean)); } } else { $operator = $not ? '!=' : '='; $this->scopeWhereField($query, $fieldName, $operator, $value, $boolean); } return $query; }
public function testGetFieldId() { $input = $this->repository->getFieldId('assets'); $this->assertEquals(1, $input); }