Laravel雄辩地获取相关模型为column_name => value

时间:2019-10-18 16:10:39

标签: laravel eloquent

我有一个与图像表相关的产品表,一对多关系。

如何获取图像记录而不是数组?而是只返回1个图像记录作为column_name:value

此代码:

$products = $request->user()->products()->orderBy('id', 'desc')->with(['images' => function($query) {
            $query->where('featured', 1)->limit(1);
        }])->get();

正在返回这样的数据:

{
        "id": 13,
        "name": "Shoes",
        "price": "3.00",
        "stock": 5,
        "pivot": {
            "user_id": 7,
            "product_id": 13
        },
        "images": [
            {
                "id": 5,
                "file": "5da9d9b493403.png",
                "featured" 1,
                "pivot": {
                    "product_id": 13,
                    "image_id": 5
                }
            }
        ]
    }
}

如何使其返回?

{
        "id": 13,
        "name": "Shoes",
        "price": "3.00",
        "stock": 5,
        "pivot": {
            "user_id": 7,
            "product_id": 13
        },
        "images": "5da9d9b493403.png"
    }
}

2 个答案:

答案 0 :(得分:1)

您可以附加一个自定义访问器,以从关系中获取第一张图片

{ "data": [ ... ] } 模型中

Product

然后只返回查询而无需加载

protected $appends = ['images'];

public function getImagesAttribute()
{
    return $this->images()->where('featured', 1)->first()->file;
}

public function images()
{
    return $this->hasMany('App\Image');
}

希望这会有所帮助

答案 1 :(得分:0)

在产品模型中

protected $appends = ['images'];

public function images()
{
    return $this->hasMany('App\Image')->select(['name'])->first();
}

仅选择名称并返回第一个关系