在Laravel中使用像JSON函数这样的Postgres功能

时间:2016-03-02 12:03:09

标签: php json postgresql laravel eloquent

Postgresql有一些使用JSON数据的功能和操作。正如它在postgresql site中所描述的那样,可以将JSON数据保存在列中,并使用 - > 运算符获取JSON数组元素。一切都还可以 普通的PHP,但我想在Laravel框架上使用它,特别是EloquentQuery Builder

Laravel中是否有此功能的标准解决方案?我开发了像bellow代码一样的简单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\" "));

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

Laravel目前不支持此功能。您可以在Laravel here中看到Postgresql支持独有的SQL语法。

然而,您可以将raw statements与Eloquent一起使用,它可以处理您需要的内容。