php - Laravel groupby min/max 过滤分组结果

标签 php mysql database laravel laravel-5

我有一个 Laravel 查询以我喜欢的方式使用 min()groupBy():

$certificates = CertificateRecord::whereHas('learner', function($query) use($user) { $query->where('user_id', '=', $user->id); })
->selectRaw('*,min(type) as type')
->groupBy('certificate_template_id')
->with('issuer','certificateType')
->paginate(10);

但是当我将它添加到混音中时...

->when($request->type, function ($query) use ($request) {
    return $query->where('type', '=', $request->type);
})

在执行此 where() 时,先前分组的结果以某种方式被忽略,并返回所有未分组的行。

最佳答案

编辑:在我看来,带有 when 条件放置的原始查询似乎没问题。这应该在不影响 groupBy 的情况下过滤 type 字段。我想告诉你的一件事是,当 $request->type 被设置时,结果集中只有一个 type 值,因此最小值将一样,没有任何变化。

$certificates = CertificateRecord::whereHas('learner', function($query) use($user) {
    $query->where('user_id', '=', $user->id);
})
    ->with('issuer', 'certificateType')
    ->when($request->type, function ($query) use ($request) {
        return $query->where('type', $request->type);
    })
    ->selectRaw('*, min(type) as type')
    ->groupBy('certificate_template_id')
    ->paginate(10);

$certificates = CertificateRecord::whereHas('learner', function($query) use($user) {
        $query->where('user_id', '=', $user->id);
    })
    ->with('issuer', 'certificateType')
    ->selectRaw('*, min(type) as type')
    ->groupBy('certificate_template_id')
    ->when($request->type, function ($query) use ($request) {
        return $query->having('type', '=', $request->type);
    })
    ->paginate(10);

如果这不起作用,请将 having 切换为 havingRaw。

return $query->havingRaw('min(type) = ' . $request->type);

关于php - Laravel groupby min/max 过滤分组结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44080385/

相关文章:

php - 如何使用 CURL 发送数组?我应该是 `urlencode`吗?

python - mysql/connector python 查询在 mysql 中有效,但在 python 中无效

php - Mysqli 期望行数作为参数

java - 为什么剂量更新会在数据库中创建新的 ID?

php - 打开上一页基于的特定 jquery ui 选项卡

php - Mod_rewrite - 重写条件不起作用

php - 如何限制对 phpMyAdmin 中特定数据库用户帐户的访问?

php - 如何防止 PHP 中的 SQL 注入(inject)?

php - CodeIgniter 使用 ajax 按钮更新数据库

mysql - 列表中缺少分类法但仍在数据库中