У меня есть следующее в одной из моих функций, но я бы хотел назвать его псевдонимом Date:
$loads = $query->get()->groupBy(function($item){
return Carbon::parse($item->dateTime)->format('F j, Y');
});
Это $query
начинается как: $query = DB::table('loads')...
и поле dateTime
является отметкой времени.
Есть ли правильный способ сделать это, чтобы включить псевдоним? Спасибо!
// Обновление всей функции контроллера:
public function apiList(Request $request){
$query = DB::table('loads')
->leftJoin('shipments', 'loads.shipmentID', '=', 'shipments.id')
->leftJoin('equipment as tractor', 'loads.tractorID', '=', 'tractor.id')
->leftJoin('employees', 'loads.driverID', '=', 'employees.id')
->leftJoin('customers as shipperCustomer', 'shipments.ship_from', '=', 'shipperCustomer.id')
->leftJoin('customers as consigneeCustomer', 'shipments.ship_to', '=', 'consigneeCustomer.id')
->select('loads.id','shipments.pro_number','shipments.id','employees.last_name as driver','tractor.unit_id as tractor','loads.dateTime','shipperCustomer.customer_name as ShipperCustomerName','consigneeCustomer.customer_name as ConsigneeCustomerName','shipments.cn_shipfromName as ShipperName','shipments.cn_shiptoName as ConsigneeName');
if($request->type){
$query->where('loads.type', $request->type);
}
if($request->status){
$query->where('loads.status', $request->status);
}
if($request->type == 1 && $request->status == 2){
$query->whereIn('shipmentID', function ( $query ) {
$query->select('shipmentID')->from('loads')->groupBy('shipmentID')->havingRaw('count(*) = 1');
});
}
$loads = $query->get()->groupBy(function($item)
{
return Carbon::parse($item->dateTime)->format('F j, Y');
});
return response()->json([
['loads'=>$loads],
['time'=>Carbon::now()]
]);
// ОБНОВЛЕНИЕ ПОКАЗАТЬ ТЕКУЩИЕ ВОЗВРАЩЕННЫЕ ДАННЫЕ:
///
К сожалению, я получаю следующее:
"SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 Выражение №1 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец 'truckin.loads.id', который функционально не зависит от столбцов в предложении GROUP BY ; это несовместимо с sql_mode = only_full_group_by (SQL: выберите loads
. id
, shipments
. pro_number
, shipments
. id
, employees
. last_name
как driver
, tractor
. unit_id
как tractor
, loads
. dateTime
как loadsDT
, shipperCustomer
. customer_name
как ShipperCustomerName
, consigneeCustomer
. customer_name
как ConsigneeCustomerName
, shipments
. cn_shipfromName
как ShipperName
, shipments
. cn_shiptoName
как ConsigneeName
из loads
левое соединение shipments
в loads
. shipmentID
= shipments
. id
левое соединение equipment
как tractor
on loads
. tractorID
= tractor
. id
левое соединение employees
on loads
. driverID
= employees
. id
левое соединение customers
как shipperCustomer
on shipments
. ship_from
= shipperCustomer
. id
левое соединение customers
как consigneeCustomer
на shipments
. ship_to
= consigneeCustomer
. id
где loads
. type
= 1 и loads
. status
= 2 и shipmentID
в (выберите shipmentID
из loads
группы по shipmentID
, имеющей count (*) = 1) группу по DATE_FORMAT (loads.dateTime, "% M% e ,% Y "))"
// Обновление с другим возвратом
// Пара обновлений - 30 августа 2018
Исходя из вашего первоначального предложения, я сделал обновления, но получил эту ошибку:
"SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1055 Выражение № 2 списка SELECT отсутствует в предложении GROUP BY и содержит неагрегированный столбец 'truckin.shipments.pro_number', который функционально не зависит от столбцов в предложении GROUP BY ; это несовместимо с sql_mode = only_full_group_by (SQL: выберите ANY_VALUE (loads.id), shipments.pro_number, shipments.id, employee.last_name в качестве драйвера, Tractor.unit_id в качестве трактора, loads.dateTime, shipperCustomer.customer_name в качестве грузоотправителя .customer_name в качестве ConsigneeCustomerName, shipments.cn_shipfromName в качестве ShipperName, shipments.cn_shiptoName в качестве ConsigneeName из loads
в левом соединении shipments
в loads
. shipmentID
= shipments
. id
в левом соединении equipment
в качестве tractor
loads
. tractorID
= tractor
. id
левое соединение employees
в loads
. driverID
= employees
. id
левое соединение customers
как shipperCustomer
в shipments
. ship_from
= shipperCustomer
. id
осталось присоединиться customers
как consigneeCustomer
на shipments
. ship_to
= consigneeCustomer
. id
, где loads
. type
= 2 и loads
. status
= 1 группа по DATE_FORMAT ( loads.dateTime, "% M% e,% Y")) "
Так что я пошел вперед и в результате пришлось сделать следующее из-за каскадного сбоя:
$ load = $ query-> groupBy (DB :: raw ('DATE_FORMAT (loads.dateTime, "% M% e,% Y")'), 'loads.dateTime', 'shipments.id', ' shipments.pro_number», 'водитель', 'трактор', 'ShipperCustomerName', 'ConsigneeCustomerName', 'ShipperName', 'ConsigneeName') -> получить ();
Теперь, очевидно, это не правильно, но это был единственный способ, которым я мог получить возврат любого вида, который в итоге оказался следующим: