Я пишу область для ресурса сообщений с текстовым столбцом, чтобы найти сообщения, содержащие ключевое слово. Они ключевое слово должно соответствовать только если есть пространство перед и пробел или типичный знак препинания после (.?!;,-
)Как использовать буквенный знак вопроса в Laravel 4 query builder
Вот мой метод объем:
public function scopeContainsKeyword($query, $keyword) {
return $query->where('post', 'LIKE', '% '.$keyword.' %')
->orWhere('post', 'LIKE', '% '.$keyword.'.%')
->orWhere('post', 'LIKE', '% '.$keyword.'!%')
->orWhere('post', 'LIKE', '% '.$keyword.';%')
->orWhere('post', 'LIKE', '% '.$keyword.',%')
->orWhere('post', 'LIKE', '% '.$keyword.'-%')
->orWhere('post', 'LIKE', '% '.$keyword.'?%');
}
Это отлично работает, если я закомментировать orWhere
с вопросом отметка. Однако, когда этот знак вопроса присутствует, он заменяется значением следующего параметра в запросе (значения даты проверяются с другой областью), а конечный параметр запроса не заменяется и остается вопросительным знаком.
Как избежать этого вопросительного знака, чтобы отметить его как буквенный знак вопроса вместо заполнителя?
Что я пробовал:
->orWhere('post', 'LIKE', DB::raw('\'% '.$keyword.'?%\''))
->orWhere('post', 'LIKE', '% '.$keyword.DB::raw('?').'%')
->orWhere(DB::raw('post LIKE \'% '.$keyword.'?%\'')
->orWhere('post', 'LIKE', '% '.$keyword.'\?%')
Ничего не сработало. Как мне заставить это работать ?!
[знак вопроса оператор в запросе] (http://stackoverflow.com/a/29964037/1235698) –
Это на самом деле не связаны - я не использую JSONB и Я не пытаюсь использовать оператор вопросительного знака. Я пытаюсь использовать его внутри строкового литерала как буквальный знак вопроса. – jdforsythe
И я не получаю нисходящее. Я довольно много исследовал, чтобы узнать, попробовал ли кто-нибудь еще этого, спросил в IRC, спросил на форумах Laravel, все безрезультатно. Вопрос совершенно ясен. – jdforsythe