[英]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 jointicket_statuses
ontickets
=id
ticket_id
exists (select * fromticket_statuses
inner join (select MAX(ticket_statuses
) asid_aggregate
,ticket_statuses
.ticket_id
fromticket_statuses
group byticket_statuses
.ticket_id
) aslatestOfMany
onlatestOfMany
.id_aggregate
=ticket_statuses
.id
andlatestOfMany
.ticket_id
=ticket_statuses
.ticket_id
wheretickets
.id
=ticket_statuses
.ticket_id
andstatus_id
in (1, 2))和(appliance_id
in (1, 2, 3) andbrand_id
in (1, 2, 3) and 1 = 1 and 1 = 1) group byticket_statuses
.status_id
) asaggregate_table
)”
在您的 SQL 查詢中,您的 select 列表必須僅包含出現在GROUP BY子句或聚合列中的列。
MySQL 默認啟用STRICT
模式,因為沒有它會發生很多奇怪的情況。 請在此處查看對STRICT
模式的解釋。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.