Laravel Eloquent 模型 JSON 输出格式

Posted

技术标签:

【中文标题】Laravel Eloquent 模型 JSON 输出格式【英文标题】:Laravel Eloquent model JSON output format 【发布时间】:2021-02-04 06:52:16 【问题描述】:

我的问题是关于向数据库发送查询时收到的 JSON 格式。 我想要的输出:

["errors":["something":"something"],"created_at":"2020-10-20 10:10:10","name":"something","id":99]

我明白了:

["id":99,"name":"something","device_results":["devices_id":99,"created_at":"2020-10-20 10:10:10","errors":["something":"something"]]]

我得到的:

public function errors()
    
        $errors = DB::table('devices')
            ->join('device_results', 'devices.id', '=', 'device_results.devices_id')
            ->select('errors', 'created_at', 'name', 'device_results.id')
            ->orderBy('created_at', 'desc')
            ->whereJsonLength('errors', '>', 0)
            ->get();

        return $errors;
    

我希望使用我的模型获得相同的结果,因为如果我这样做:

public function errors()
    
        $devices = Devices::with(['device_results' => function($query) 
            $query->select('device_results.devices_id','created_at','errors')
            ->whereJsonLength('errors', '>', 0)
            ->orderBy('created_at', 'desc')
            ->get();
        ])->get();

        return $devices;
    

它总是采用这种格式,还是我可以使用模型并获得与 DB 类相同的格式?我在前端使用 Vue,希望避免嵌套。

谢谢

【问题讨论】:

如果你使用带关系的模型,结果总是嵌套的。每个关系都将作为单独的对象或集合加载。 【参考方案1】:

您是否尝试过创建Resource? 文档:https://laravel.com/docs/8.x/eloquent-resources

【讨论】:

谢谢,我会看的!我对 laravel 还很陌生,还没有完整的概述。

以上是关于Laravel Eloquent 模型 JSON 输出格式的主要内容,如果未能解决你的问题,请参考以下文章

修剪 Laravel 中所有 Eloquent 模型的所有字符串属性

Laravel Eloquent,返回带有“belongsTo”对象的 JSON?

Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化

Laravel 5 Eloquent在多个级别上向JSON添加关系

Laravel Eloquent 搜索 JSON 数组以获取特定列的值

Laravel 用户模型未在 JSON 响应中处理