我有:
public function getThumbnail($id) {
$thumbnail = Product::find($id);
if($thumbnail) {
return $thumbnail->with('images')->get();
} else {
return response()->json('That cake does not exist.');
}
}
将产品与附加的任何图像一起返回。
但是,我希望它只返回标记为" primary"的图像。像这样(伪):
return $thumbnail->with('images->isPrimary')->get();
我怎样才能做到这一点?
怎么样:
return $thumbnail->with(['images' => function ($query) {
$query->where('is_primary', 1);
}])->get();
答案 0 :(得分:3)
您应该使用whereHas
运算符来获取至少有一个Products
图像的所有primary
,如下所示:
$thumb = Product::whereHas('images', function ($query) {
$query->where('primary', 'true');
})->get();
有关查询关系的更多信息here。
<强>更新强>
在Product
之后找到id
,如果您只想显示primary
的图片,可以使用Query Scopes:
在Image
课程中:
public function scopePrimaries ($query) {
return $query->where('is_primary', 1);
}
那么你可以像这样获取它们:
$primaryThumbs = $product->images()->primaries()->get();
答案 1 :(得分:0)
我这样做似乎有效:
public function getThumbnail($id)
{
$thumb = Product::find($id);
if ($thumb) {
return $thumb->with(['images' => function ($query) {
$query->where('is_primary', 1);
}])->whereHas('images', function ($query) {
$query->where('is_primary', 1);
})->get();
} else {
return response()->json([]);
}
}
有更简单的方法吗?