whereJsonContains的使用
因为平时会存储一些数据的json格式,比如我们把课程的一些信息使用json的格式存储起来了,如果想通过课程名称来查询数据,会有点费劲,但是使用whereJsonContains 就会很轻松,不过使用的时候也有一些需要注意的地方
插入表数据
INSERT INTO `posts` (`id`, `user_id`, `content`, `created_at`, `updated_at`)
VALUES
(1, 1, '{\"id\":1,\"name\":\"大学生物必修课\",\"json_string\":{\"title\":\"课程1\",\"content\":\"母猪的产后护理\"}}', NULL, NULL),
(2, 2, '{\"id\":2,\"name\":\"大学高数必修课\",\"json_string\":{\"title\":\"课程2\",\"content\":\"高斯的魔幻童年\"}}', NULL, NULL),
(3, 2, '{\"id\":3,\"name\":\"大学音乐必修课\",\"json_string\":{\"title\":\"课程3\",\"content\":\"烤面筋\"}}', NULL, NULL),
(4, 3, '{\"id\":4,\"name\":\"大学医学必修课\",\"json_string\":{\"title\":\"课程4\",\"content\":\"公牛受孕\"}}', NULL, NULL);
最后的样式
查询
return DB::table('posts')->whereJsonContains('content->json_string->content','母猪的产后护理')->get();
结果
[
{
"id": 1,
"user_id": 1,
"content": "{\"id\":1,\"name\":\"大学生物必修课\",\"json_string\":{\"title\":\"课程1\",\"content\":\"母猪的产后护理\"}}",
"created_at": null,
"updated_at": null
}
]
需要注意的地方
数据库里面的查询列必须都要有,就是说content不能是空,不然就会返回空数据
比如这样的数据,如果使用上面的查询语句,是没有结果的
这样的数据就是可以查询到的,就是对于字符串类型的数据,可以使用空字符,但是id不能为空,ID必须给一个默认值