Красноречивое условие не обнаруживает акцентированные буквы в состоянии где - PullRequest
0 голосов
/ 27 мая 2019

В моем веб-приложении есть местоположения, а в каждом местоположении есть company_id, и я не хочу, чтобы в одной и той же компании были одинаковые названия. Итак, я сделал это:

$name = $request->get('name');
$location = Location::find($id);
if ($location->name != $name) {
    $old_location = Location::where('company_id', $location->company_id)
        ->where('name', $name)
        ->first();
    if ($old_location) {
        $errors = ['name' => trans('asset.location').' '.$name.' 
        '.trans('message.already_exists')];
            return back()->withErrors($errors)->withInput();
    }
}

Проблема в том, что если у меня есть Service местоположение и я хочу изменить его имя на Šervice, это не позволит мне сделать это. У меня нет места с таким названием. Если условие проходит, но при красноречивом поиске оно не выполняется. Как это возможно?

Ответы [ 2 ]

2 голосов
/ 27 мая 2019

Убедитесь, что вы правильно указали кодировку в файле конфигурации. как

'charset'   => 'utf8',
'collation' => 'utf8_unicode_ci',

src: Laravel 5.1 utf-8 сохранение в базу данных

И

Я думаю, вы должны использовать здесь проверку ларавеллы. Таким образом, он может проверить запрос перед обработкой.

Validator::extend('uniqueLocationInCompany', function ($attribute, $value, $parameters, $validator) {
    $count = DB::table('locations')->where('name', $value)
                                ->where('company_id', $parameters[0])
                                ->count();

    return $count === 0;
});

Затем вы можете получить доступ к этому новому правилу в функции валидатора:

'name' => "uniqueLocationInCompany:{$request->company_id}"

Для получения дополнительной информации о том, как мы должны выполнять проверку в laravel, вы должны следовать документации здесь.

https://laravel.com/docs/5.8/validation

0 голосов
/ 27 мая 2019

Я нашел решение ! и после прочтения верхнего ответа я изменил свой код для $old_location на этот:

$old_location = Location::where('company_id', $location->company_id)
    ->whereRaw('name COLLATE utf8mb4_bin', $name)
    ->first();

Я использовал другую сортировку для своего красноречивого условия, и она работает безупречно.

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