Laravel JSON列上雄辩的Select查询

Laravel JSON列上雄辩的Select查询,laravel,eloquent,Laravel,Eloquent,我有一个属性表的JSON列。下面是选择特定字段的有力查询 Company::select('id', 'information') ->with([ 'properties' => function($sql) { return $sql->select('id', 'company_id', 'information->>status'); } ])

我有一个属性表的JSON列。下面是选择特定字段的有力查询

Company::select('id', 'information')
        ->with([
            'properties' => function($sql) {
                return $sql->select('id', 'company_id', 'information->>status');
            }
        ])
        ->get();


有没有办法用实际密钥替换响应?

获取密钥的最简单方法是给它一个别名。大概是

$sql->select('id', 'company_id', 'information->status as status');
$sql->select('id', 'company_id', 'information->status as information_status');
$sql->select('id', 'company_id', 'information->status as information.status');
编辑

如果您希望保持响应的结构,那么最好创建一个响应并让它处理该结构。所以

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Resources\Json\ResourceCollection;

class Properties extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        $information = ['status'=>optional($this->information)['status']];
        return [
            'id' => $this->id,
            'company_id' => $this->company_id,
            'information' => $information,
        ];
    }
}

我想保持响应的结构<代码>..,属性:[{id:90,信息:{status:“available”}}]