2015-08-02 4 views
0

Я ищу способ запроса атрибута при удалении пространства и создании его нижнего регистра.Laravel eloquent model

Artist Table 
artist_id - '1' 
artist_name - 'The Big Shot' 

Я хочу, чтобы иметь возможность создать следующий запрос

Artist::where('artist_name', '=', $request->input('artistname')); 

Пример

Artist::where('thebigshot' = 'thebigshot') 
+0

BTW, если ваша сортировка текстового поля заканчивается на _сi (без учета регистра), например utf8_general_ci, тогда вам не нужен нижний корпус. «WHERE text =« abc »и« WHERE text = «ABC» означают то же самое. это имеет смысл, если у вас есть чувствительная к регистру сортировка, например latin1_general_cs – M0rtiis

ответ

3

Удаление пробелов и lowercasing строки не является задачей для красноречива - это то, что вы должны прежде чем передавать это запрос, например:

$name = strtolower(preg_replace('/\s+/', '', $request->input('artistname')); 
Artist::where('artist_name', '=', $name)->get(); 
+0

Что делать, если данные сохраняются в базе данных как «Большой выстрел», и я хочу сравнить их с «thebigshot» после того, как вырезали и удалили пространство? – user2595818

+0

Прежде всего, вы должны нормализовать свои данные (в нижнем регистре, удалить пробелы) перед сохранением в базе данных, иначе вам нужно обработать каждую возвращаемую строку для каждого запроса +, вы не сможете использовать индексы, чтобы быстрее находить соответствующие строки. Но если вы действительно хотите это сделать, вам нужно нормализовать строку, которая поступает из запроса, как в ответе, и сравнить его с нормированной строкой в ​​базе данных, которую вы будете вычислять на лету. –

+0

Чтобы сделать это, вместо «где» вы можете найти в ответе: do :: Artist :: whereRaw («LOWER (REPLACE (name, '', '')) =?", Array ($ name)) -> получить(); –

0

Это другой способ сделать, и вы получите тот же результат. $ name = strtolower (str_replace ('', '', 'the large shot')); // thebigshot Исполнитель :: where ('artist_name', '=', $ name) -> get();

Смежные вопросы