【问题标题】:Laravel 5.7 exists/unique validation with JSON field typeLaravel 5.7 具有 JSON 字段类型的存在/唯一验证
【发布时间】:2019-03-29 01:05:01
【问题描述】:

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

id: integer
name: json

字段“名称”将值存储为:

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

我写了以下规则:

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

但它不是那样工作的。如何让它发挥作用?

MariaDB 10.1.36 / Laravel 5.7

【问题讨论】:

  • 有错误吗?你使用的是什么数据库和版本的 Laravel?
  • 我添加了信息。谢谢。
  • Laravel 不支持 MariaDB 上的 JSON 查询。这将在 Laravel 5.8 中修复。
  • 同时,你可以使用这个包:github.com/ybr-nx/laravel-mariadb
  • 我将 MariaDB 升级到 10.3.9 并安装了软件包 laravel-mariadb。现在一切都像魅力一样工作。如果你愿意,你可以发布你之前的两个 cmets 作为答案,我会接受的。谢谢。

标签: json laravel validation unique exists


【解决方案1】:

我认为使用 laravel 的默认验证规则是不可能的。 您必须将 where 子句添加到 exists 规则或为此创建自己的 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);
            })
        ],
    ];
}

【讨论】:

    【解决方案2】:

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

    同时,你可以使用这个包:https://github.com/ybr-nx/laravel-mariadb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-09
      • 2019-07-06
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2017-10-04
      • 2018-08-09
      相关资源
      最近更新 更多