Laravel 5.7 существует / уникальная проверка с типом поля JSON - PullRequest
0 голосов
/ 24 октября 2018

У меня есть таблица "стран" со следующими полями:

id: integer
name: json

Поле "имя" хранит значение как:

{ "en": "Germany", "de": "Deutschland" }

Я написал следующее правило:

'country' => 'nullable|string|max:255|exists:countries,name->en'

но это так не работает.Как мне заставить это работать?

MariaDB 10.1.36 / Laravel 5.7

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

Laravel 5.7 не поддерживает JSON-запросы на MariaDB.Это будет исправлено в Laravel 5.8.

Тем временем вы можете использовать этот пакет: https://github.com/ybr-nx/laravel-mariadb

0 голосов
/ 24 октября 2018

Я не думаю, что это возможно с правилами проверки по умолчанию от laravel.Для этого вам необходимо добавить условие where к существующему правилу или создать собственное настраиваемое правило проверки :

Использование предложения where:

public function rules()
{
    $country = $this->country;

    return [
        'country' => [
            'nullable',
            'string',
            'max:255',
            Rule::exists('countries')->where(function ($query) use ($country) {
                return $query->where(DB::raw('JSON_EXTRACT(`name`, "$.en")'), $country);
            })
        ],
    ];
}
...