在 Laravel 中使用诸如 JSON 函数之类的 Postgres 功能
Posted
技术标签:
【中文标题】在 Laravel 中使用诸如 JSON 函数之类的 Postgres 功能【英文标题】:Use Postgres features like JSON functions in Laravel 【发布时间】:2016-06-15 06:34:36 【问题描述】:Postgresql 有一些使用 JSON 数据的功能和操作。正如postgresql site 中所述,可以将 JSON 数据保存在列中,并使用 -> 运算符获取 JSON 数组元素。一切正常 普通的 php,但我想在 Laravel 框架上使用它,特别是 Eloquent 或 Query Builder。
Laravel 中是否有针对此功能的标准解决方案?我开发了类似下面代码的普通 sql,它可以工作,但我正在寻找更好的解决方案。
$host = env('DB_HOST', 'localhost');
$database = env('DB_DATABASE', 'aaa');
$user = env('DB_USERNAME', '22222');
$pass = env('DB_PASSWORD', '11111');
$table = 'table';
$column = 'json';
$connection = pg_connect("host=$host dbname=$database user=$user password=$pass");
$result = pg_fetch_all(pg_query($connection, "SELECT $column->>'name' FROM \"$table\" "));
【问题讨论】:
【参考方案1】:从 Laravel 5.3 开始,这是可能的,但仅适用于 mysql。 5.6 版也支持 Postgress。假设您有以下用户,其个人资料为 JSON 数据类型:
"id": 1,
"name": "Mahmood",
"profile":
"bio": "Lorem ipsum",
"phone": "1234"
你可以这样查询:
$phone = DB::table('users')
->where('profile->phone', '1234')
->get();
参考:https://mattstauffer.co/blog/new-json-column-where-and-update-syntax-in-laravel-5-3
【讨论】:
"注意:MariaDB 没有 JSON 列,而 PostgreSQL 有 JSON 列,但此功能目前似乎不适用于它们。因此,暂时将其视为 MySQL 5.7+ 功能。" - 根据您的链接 我已经深入挖掘了,5.3 版不支持 Postgress,但显然 5.6 版支持。【参考方案2】:Laravel 目前不支持此功能。您可以在 Laravel here 中看到 Postgresql 支持独有的 SQL 语法。
但是,您可以将 raw statements 与 Eloquent 一起使用,它应该可以满足您的需求。
【讨论】:
以上是关于在 Laravel 中使用诸如 JSON 函数之类的 Postgres 功能的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat 或 Java 中是不是存在诸如 beforeCrash() 或 beforeExit() 之类的函数
为啥诸如 :not() 和 :has() 之类的函数伪函数允许引用参数?
诸如用于测试 HTTP 请求的虚拟 REST 服务器之类的东西? [关闭]