在 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 服务器之类的东西? [关闭]

如何在角度 4 中使用诸如“offsetWidth”之类的 JS 属性

Laravel 刀片模板不使用 slug 渲染

如何在本机反应中使用诸如 moment.js 之类的 javascript 库