Laravel 5.7 exists/unique 使用 JSON 字段类型进行验证
Laravel 5.7 exists/unique validation with JSON field type
我有一个 "countries" table,其中包含以下字段:
id: integer
name: json
字段 "name" 将值存储为:
{ "en": "Germany", "de": "Deutschland" }
我写了以下规则:
'country' => 'nullable|string|max:255|exists:countries,name->en'
但事实并非如此。我如何让它发挥作用?
MariaDB 10.1.36 / Laravel 5.7
我认为 laravel 的默认验证规则不可能做到这一点。
您必须向现有规则添加一个 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);
})
],
];
}
Laravel 5.7 不支持 MariaDB 上的 JSON 查询。这将在 Laravel 5.8.
中修复
同时,您可以使用这个包:https://github.com/ybr-nx/laravel-mariadb
我有一个 "countries" table,其中包含以下字段:
id: integer
name: json
字段 "name" 将值存储为:
{ "en": "Germany", "de": "Deutschland" }
我写了以下规则:
'country' => 'nullable|string|max:255|exists:countries,name->en'
但事实并非如此。我如何让它发挥作用?
MariaDB 10.1.36 / Laravel 5.7
我认为 laravel 的默认验证规则不可能做到这一点。 您必须向现有规则添加一个 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);
})
],
];
}
Laravel 5.7 不支持 MariaDB 上的 JSON 查询。这将在 Laravel 5.8.
中修复同时,您可以使用这个包:https://github.com/ybr-nx/laravel-mariadb