我有一个与图像表相关的产品表,一对多关系。
如何获取图像记录而不是数组?而是只返回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"
}
}
答案 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();
}
仅选择名称并返回第一个关系