簡體   English   中英

在 laravel 中進行表加入和分組

[英]Table join and group by in laravel

我正在處理 API,我正在使用資源返回集合。 我在分組數據時遇到問題。 我有以下代碼。

return TicketResource::collection(
                Ticket::query()                    
                    ->search(request('search'))
                    ->whereHas(
                        'latestStatus', function($query) use ($request){
                            $query->whereIn('status_id', $request->status)                            
                            ->where(function($inner_query) use ($request){
                                if($request->status === 1){
                                   $inner_query->where( 'tickets.user_id', '!=', auth()->user()->id);
                                } elseif($request->status === 2){
                                    $inner_query->where( 'ticket_statuses.user_id', auth()->user()->id);
                                }
                            });
                        }
                    )
                    ->join('ticket_statuses', function($join){
                        $join->on('tickets.id', '=', 'ticket_statuses.ticket_id');
                    })
                    ->where(function ($query) use ($userBrands, $userAppliances, $buyerPurchasedTicket, $buyerexcludedZipCode, $buyerexcludedDevices) {
                        $query->whereIn('appliance_id', $userAppliances);
                        $query->whereIn('brand_id',  $userBrands);
                        // $query->whereNotIn('id', $buyerPurchasedTicket);
                        $query->whereNotIn('brand_id', $buyerexcludedDevices);
                        $query->whereNotIn('zip_code_id', $buyerexcludedZipCode);
                    })
                    ->when($request->filters['brand_ids'], fn ($q) => $q->whereIn('brand_id', $request->filters['brand_ids']))
                    ->when($request->filters['appliance_ids'], fn ($q) => $q->whereIn('appliance_id', $request->filters['appliance_ids']))
                    ->when($request->filters['province_ids'], fn ($q) => $q->whereIn('province_id', $request->filters['province_ids']))
                    ->when($request->price, fn ($q) => $q->whereBetween('price', [$request->min_price, $request->max_price]))
                    
                    ->orderBy('tickets.created_at', $request->order ?? 'desc')
                    ->groupBy('ticket_statuses.status_id')
                    ->paginate($request->rows ?? 30)
                )
            ->response()->getData(true);

當我運行上面的代碼時,出現以下錯誤

SQLSTATE[42000]:語法錯誤或訪問沖突:1055 Expression #1 of SELECT 列表不在 GROUP BY 子句中並且包含非聚合列“project.tickets.id”,它在功能上不依賴於 GROUP BY 子句中的列; 這與 sql_mode=only_full_group_by (SQL: id count( ) 不兼容 as aggregate from ( tickets ticket_statuses tickets inner join ticket_statuses on tickets = id ticket_id exists (select * from ticket_statuses inner join (select MAX( ticket_statuses ) as id_aggregate , ticket_statuses . ticket_id from ticket_statuses group by ticket_statuses . ticket_id ) as latestOfMany on latestOfMany . id_aggregate = ticket_statuses . id and latestOfMany . ticket_id = ticket_statuses . ticket_id where tickets . id = ticket_statuses . ticket_id and status_id in (1, 2))和( appliance_id in (1, 2, 3) and brand_id in (1, 2, 3) and 1 = 1 and 1 = 1) group by ticket_statuses . status_id ) as aggregate_table )”

在您的 SQL 查詢中,您的 select 列表必須僅包含出現在GROUP BY子句或聚合列中的列。

MySQL 默認啟用STRICT模式,因為沒有它會發生很多奇怪的情況。 在此處查看對STRICT模式的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM