我有一个带有以下字段的“国家”表:
id: integer
name: json
字段“名称”将值存储为:
{ "en": "Germany", "de": "Deutschland" }
我写了以下规则:
'country' => 'nullable|string|max:255|exists:countries,name->en'
但是它不能那样工作。我该如何运作?
MariaDB 10.1.36 / Laravel 5.7
答案 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