Laravel 5.7存在/具有JSON字段类型的唯一验证

时间:2018-10-24 14:49:33

标签: json laravel validation unique exists

我有一个带有以下字段的“国家”表:

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 :(得分:0)

我认为使用laravel的默认验证规则是不可能的。 您将必须在where规则中添加where子句,或为此创建自己的custom validation规则:

使用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);
            })
        ],
    ];
}

答案 1 :(得分:0)

Laravel 5.7在MariaDB上不支持JSON查询。这将在Laravel 5.8中修复。

同时,您可以使用以下软件包:https://github.com/ybr-nx/laravel-mariadb