Laravel从关系中获得第一项的模型

时间:2015-07-28 17:29:07

标签: php laravel laravel-5

我有:

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();

2 个答案:

答案 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([]);
    }
}

有更简单的方法吗?