• laravel使用JSON 类型方式进行存储


    Laravel 从 5.0 版本开始就已支持 JSON 数据的转换,但这样做的目的只是为了方便数据处理。你的数据依然以 TEXT 类型存放在你的数据库里。不过 MySQL 从 5.7 版本起开始支持原生 JSON 数据类型,这将为我们的开发带来便捷, Laravel 5.3 也为基于 JSON 类型的数据查询和更新引入了新的语法。

    假设我们有一个包含 JSON 类型字段的数据表:

    class CreateContactsTable extends Migration
    {
        public function up()
        {
            Schema::create('contacts', function (Blueprint $table) {
                $table->increments('id');
                $table->string('name');
                $table->json('meta');
                $table->timestamps();
            });
        }

    我们假设每个 contacts 表单都包含一些基本信息,比如联系人姓名。但是另外的一些属性是非常灵活的,这些属性最好以 JSON 类型方式进行存储 —— 就像上文的 meta 字段。

    where() 语法介绍

    假定某个 contects 的表单信息如下:

    {
        "id": 1,
        "name": "Monkey",
        "meta": {
            "wants_newsletter": true,
            "favorite_color": "red"
        }
    }

    现在我们想要获取所有 favorite_color 为 red 的用户,我们可以这么写:

    $redLovers = DB::table('contacts')
        ->where('meta->favorite_color', 'red')
        ->get();

    这段代码将会从 contacts 表中把 meta 字段的 favorite_color 属性值为 red 的所有数据读取出来。

    update() 语法介绍

    我想将上文的 Monkey 用户的 wants_newsletter 设置为 false,可以这样写:

    DB::table('contacts')
        ->where('id', 1)
        ->update(['meta->wants_newsletter' => false]);

    值得注意的是,在上文代码中,即使 wants_newsletter 键值在此之前不存在,现在也会被创建并设置为 false。

    看到它的强大之处没?在 5.3 里我们可以基于 JSON 字段属性进行查询,可以更新 JSON 字段中的任一属性而无需考虑其是否存在。

    注:目前仅有 MySQL 5.7+ 数据库支持这一特性。

  • 相关阅读:
    [NOI Online 2021 提高组] 愤怒的小 N
    CF1474F 1 2 3 4 ...
    CF1466H Finding satisfactory solutions
    CF1336F Journey
    [PKUSC2021]代金券
    如何科学地设计对拍随机种子
    CF1168E Xor Permutations
    「JOISC 2019 Day2」两种运输
    springboot json参数
    springboot整合webserver应用
  • 原文地址:https://www.cnblogs.com/phpper/p/7442782.html
Copyright © 2020-2023  润新知