Laravel和PHP:返回特殊格式的JSON

Dan*_*iel 5 php mysql json laravel

在进行查询后,如何创建回显格式化的JSON,如下所示:

{
  "results": [
    {
      "user_id": "1",
      "name": "Apple",
      "address": "7538 N LA CHOLLA BLVD",
      "city": "Palo Alto",
      "state": "CA",
      "latlon": [
        -111.012654,
        32.339807
      ],
    },
    {
      "user_id": "2",
      "name": "Microsoft",
      "address": "75 S BWY STE 400",
      "city": "Palo Alto",
      "state": "CA",
      "latlon": [
        -73.764497,
        41.031858
      ],
    },
   ],

  "meta": {
    "page": 1,
    "per_page": 10,
    "count": 493,
    "total_pages": 50
  }
}
Run Code Online (Sandbox Code Playgroud)

这是我目前的查询:

public function getAgenciesJson() {

    $agencies = DB::table('users')->where('type','a')->orWhere('type','l');

}
Run Code Online (Sandbox Code Playgroud)

考虑到我有一个像[-111.012654,32.339807]这样的"latlon"字段,还有一个"结果"标签和一个"元"标签,所以还没想出如何输出这样的JSON.

提前致谢

Jam*_*lor 1

该方法存在:

->toJson()

参考: http: //laravel.com/docs/4.2/eloquent#converting-to-arrays-or-json

将您的 getAgenciesJson 更新为:

public function getAgenciesJson() {

    return DB::table('users')->where('type','a')->orWhere('type','l')->toJson();

}
Run Code Online (Sandbox Code Playgroud)

然后你可以通过以下方式回显:

<?= SomeModel::getAgenciesJson(); ?>
Run Code Online (Sandbox Code Playgroud)

要修改列名称,您可以更新您的选择。以下是来自 Laravel 文档的示例:

$users = DB::table('users')->select('name as user_name')->get();
Run Code Online (Sandbox Code Playgroud)

这将是您正在寻找的内容的更完整实现的版本,减去列别名,因为您并没有真正提到它们是什么。

public function getAgenciesJson($page, $per_page = 10) {
   $output = [
        'results' => [],
        'meta'    => [],
    ];

    // Get Results
    $output['results'] = DB::table('users')->where('type','a')->orWhere('type','l')->take($per_page)->skip($per_page * ($page - 1))->get();

    // Set Meta
    $output['meta'] = [
        'page'        => $page,
        'per_page'    => $per_page,
        'count'       => DB::select('SELECT FOUND_ROWS()'),
        'total_pages' => DB::table('users')->count() / $per_page        
    ];

    // Return
    return json_encode($output);
}
Run Code Online (Sandbox Code Playgroud)

您的原始代码并未尝试获取或处理分页信息,但此示例涵盖了该信息,以便提供您表示想要返回的元数据。

不确定您是否希望 Count 成为当前结果集的数量或该表上所有记录的计数。如果您不想要当前设置,而是想要整个计数,您可以使用 DB::table('users')->count() 尽管我会将其分配给一个变量并使用它,而不是在元信息。