【问题标题】:Laravel query builder : where clause after addSelect (mysql)Laravel 查询生成器:addSelect 之后的 where 子句(mysql)
【发布时间】:2021-06-26 20:11:16
【问题描述】:

我有一个没有最后一个 where 子句的查询。但是,不工作。 代码:

$worksheets = Worksheet::withoutGlobalScopes()->selectRaw('COUNT(*)')
            ->whereColumn('worksheets.partner_id', 'partners.id')
            ->whereHas('tireServiceItems', function($query) {
                $query->where('service_type', 'like', 'szerelés%')->orWhere('service_type', 'like', 'javítás%');
            })
            ->where('service_date', '>=', $from)
            ->where('service_date', '<=', $to)
            ->when($partnerId, function($query) use ($partnerId) {
                $query->where('partner_id', $partnerId);
            })
            ->whereNull('worksheets.deleted_at');

return Partner::select('*')->addSelect(['worksheets_count' => $worksheets])
            ->where('worksheets_count', '>', 0)->paginate(20)->map(function($item) {
                return [
                    'partner_id' => $item->id,
                    'partner_name' => $item->name,
                    'partner_address' => $item->address(),
                    'worksheets_count' => $item->worksheets_count,
                ];
            })->toArray();

没有where('worksheet_count', '&gt;', 0) 工作,得到这个错误:

未找到列:1054 'where 子句'中的未知列 'worksheets_count'(SQL:select count() as aggregate from partners where worksheets_count > 0)*

如果你能帮助我,谢谢:)

【问题讨论】:

    标签: mysql laravel


    【解决方案1】:

    你需要使用“拥有”

    return Partner::select(['*', DB::raw($worksheets.' as worksheets_count')])
    ->having('worksheets_count', '>', 0)
    ->paginate(20)
    ...
    

    改为

    ->where('worksheets_count', '>', 0)
    

    先改成

    $worksheets = Worksheet::withoutGlobalScopes()
                ->whereColumn('worksheets.partner_id', 'partners.id')
                ->whereHas('tireServiceItems', function($query) {
                    $query->where('service_type', 'like', 'szerelés%')->orWhere('service_type', 'like', 'javítás%');
                })
                ->where('service_date', '>=', $from)
                ->where('service_date', '<=', $to)
                ->when($partnerId, function($query) use ($partnerId) {
                    $query->where('partner_id', $partnerId);
                })
                ->whereNull('worksheets.deleted_at')
                ->count();
    

    【讨论】:

    • 我试过了,但我得到了同样的错误:Column not found: 1054 Unknown column 'worksheets_count' in 'have Clause' (SQL: select count() as aggregate来自partners 具有worksheets_count > 0)"*
    • @LaszloP 更新答案
    • 再次出现同样的错误:找不到列:1054 '有子句'中的未知列'worksheets_count'(SQL:选择计数()作为来自partners 的聚合具有@987654327 @ > 0)*
    • @LaszloP 第一个请求没有返回响应,因此替换不起作用。我替换了第一个查询
    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    相关资源
    最近更新 更多