【问题标题】:Use Postgres features like JSON functions in Laravel在 Laravel 中使用诸如 JSON 函数之类的 Postgres 功能
【发布时间】:2016-06-15 06:34:36
【问题描述】:

Postgresql 有一些使用 JSON 数据的功能和操作。正如postgresql site 中所述,可以将 JSON 数据保存在列中,并使用 -> 运算符获取 JSON 数组元素。一切正常 普通的 php,但我想在 Laravel 框架上使用它,特别是 EloquentQuery 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\" "));

【问题讨论】:

    标签: php json postgresql laravel eloquent


    【解决方案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 一起使用,它应该可以满足您的需求。

    【讨论】:

      猜你喜欢
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 2021-11-03
      • 2013-03-06
      • 2020-09-11
      • 2017-12-12
      相关资源
      最近更新 更多