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+ 数据库支持这一特性。

laravel使用JSON 类型方式进行存储的更多相关文章

  1. mysql 5.7 laravel json类型数据相关操作

    2018年10月16日18:14:21 官方文档中文翻译版 原文:https://dev.mysql.com/doc/refman/5.7/en/json.html 最后有部分实例和一个小总结 11. ...

  2. MySQL JSON 类型数据操作

    1.Java 中动态扩展字段,会导致数据库表被锁,在MySQL 5.7.8版本之前,因为MySQL不能直接操作JSON类型数据,可以将一个字段设定成varchar类型,里面存放JSON格式数据,这样在 ...

  3. mysql中生成列与JSON类型的索引

    MySQL中支持生成列,生成列的值是根据列定义中包含的表达式计算的. 一个简单的例子来认识生成列! CREATE TABLE triangle( sidea DOUBLE, sideb DOUBLE, ...

  4. MySQL对JSON类型UTF-8编码导致中文乱码探讨

    前言 继上文发表之后,结合评论意见并亲自验证最终发现是编码的问题,但是对于字符编码还是有点不解,于是乎,有了本文,我们来学习字符编码,在学习的过程中,我发现对于MySQL中JSON类型的编码导致数据中 ...

  5. SpringMVC——对Ajax的处理(包含 JSON 类型)

    一.首先要搞明白的一些事情. 1.从客户端来看,需要搞明白: (1)要发送什么样格式的 JSON 数据才能被服务器端的 SpringMVC 很便捷的处理,怎么才能让我们写更少的代码,如何做好 JSON ...

  6. Struts2+Jquery实现ajax并返回json类型数据

    来源于:http://my.oschina.net/simpleton/blog/139212 摘要 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的 ...

  7. 已知json类型根据类型封装集合

    1编写帮助类根绝url得到json public static string Post(string url) { string strURL = url; //创建一个HTTP请求 HttpWebR ...

  8. 转载:Struts2+Jquery实现ajax并返回json类型数据

    摘要: 主要实现步骤如下: 1.JSP页面使用脚本代码执行ajax请求 2.Action中查询出需要返回的数据,并转换为json类型模式数据 3.配置struts.xml文件 4.页面脚本接受并处理数 ...

  9. json进阶(一)js读取解析JSON类型数据

    js读取解析JSON类型数据 一.什么是JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式,同 ...

随机推荐

  1. css概括2

    Css内容: 常用样式:字体.颜色.背景... 字体:大小.颜色.粗细.字体 Text-decoration:文本修饰{overline 上 Underline 下 Line-throung 中} T ...

  2. 关于HttpClient,HttpURLConnection,OkHttp的用法

    1 HttpClient入门实例 1.1发送get请求 /** * HttpClient发送get请求 * @param url 请求地址 * @return * @throws IOExceptio ...

  3. 《mysql必知必会》学习_第14章_20180806_欢

    第14章:使用子查询. 子查询是镶嵌在其他查询里面,相当其他的select查询的条件来. P91 select order_num from where prod_id='tnt2';   #检索条件 ...

  4. Linux 线程编程3.0

    #include <pthread.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h& ...

  5. 【接口时序】2、Verilog实现流水灯及与C语言的对比

    一. 软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1.FPGA型号:XC6SLX45 ...

  6. 下载 rpm 源码包并重新编译

    $ yumdownloader --source gdb $ rpmbuild --rebuild gdb-7.8.1-30.fc21.src.rpm $ cd ~/rpmbuild/SPECS/ $ ...

  7. Spring webFlux:坐等spring-boot-starter-data-mysql-reactive

    spring-boot-starter-data-mongodb-reactive spring-boot-starter-data-redis-reactive 坐等 spring-boot-sta ...

  8. oracle对sum出来的数字进行非空补0处理

    oracle在使用函数计算式会遇到这样的情况:例如sum函数 如果计算的sum值为null,则用0替代 方法1(便于理解): select when sum(c.num) is null then   ...

  9. Linux - 执行命令与脚本

    001 - Linux执行多条命令 方法1:在命令行下可以一次性粘贴多条语句,shell会依次执行并输出结果 方法2:在一个命令行中,用分号将各个命令隔开或者使用&&连接各个命令 示例 ...

  10. hdu 6127---Hard challenge(思维)

    题目链接 Problem Description There are n points on the plane, and the ith points has a value vali, and i ...