Laravel Eloquent从关系到响应添加数据

时间:2019-12-18 09:10:13

标签: laravel eloquent

我有一个包含灯和图像的数据库。他们有一对一的关系。目前,我从数据库中获取指示灯,并将响应发送到我的vue前端。

我的查询:

$correspondingLamps = Lamp::where(['fitting' => $fitting, 'dimmability' => $dimmable])
    ->where(function ($query) {
        $query->where('light_color_code', '=', '2800K')
        ->orWhere('light_color_code', '=', '2700K');
    })
    ->get();

我的答复:

foreach ($correspondingLamps as $lamp) {

    $image = [
        'lamp_id' => $lamp->image->lamp_id,
        'path' => $lamp->image->path
    ];

    array_push($images, $image);
}

return response()->json([
    'images' => $images,
    'lamps' => $correspondingLamps
]);

但是我认为这可以做很多“清洁”工作。是否有一种简单的方法来获取image_path并将其传递给我的lamp收藏夹?

2 个答案:

答案 0 :(得分:1)

在Laravel中,您应该始终默认使用内置函数。 Laravel具有良好的序列化功能,请让Laravel处理。简便的方法是,急于使用with()方法加载图像,它将自动与响应一起serialized

return Lamp::where(['fitting' => $fitting, 'dimmability' => $dimmable])
    ->where(function ($query) {
        $query->where('light_color_code', '=', '2800K')
            ->orWhere('light_color_code', '=', '2700K');
    })->with('image')
    ->get();

这应该产生与此类似的结果。

[
    {// your lamp object
        "id": 1,
        "image": {
            "id": 1
            "path": "some/path"
        }
    }
]

答案 1 :(得分:0)

只需放置网址路径

return response()->json([
    'images' => url('public/your_folder_path/' . $images);
    'lamps' => $correspondingLamps
]);