2017-11-22 1 views
0

나는 Laravel 5.5을 사용하고 있습니다. 아래의 데이터를 반환하는 쿼리가 있습니다 (원시 쿼리는 웅변이 아닙니다).쿼리 결과를 반복하고 새 개체를 생성하는 방법

주문 번호는 여러 개체 (예 : 164377)에서 동일 할 수 있습니다. 내가 수행해야하는 작업은 모든 결과를 반복하고 각 ordernumber에 대해 여러 개의 객체를 갖는 대신 각 주문 번호 (즉, 164377)에 대한 객체를 만드는 것입니다.

나는 각 순서를 확인해야하고, 주문 번호가 동일한 경우 나는 몇 가지 속성을 조작 할 필요가 내가 조회 한 후이 만 수행 할 수 있기 때문에이 group by 할 수 없습니다

데이터가 반환

모든 서버로부터의 응답 JSON

 { 
     "ordernumber": 164377, 
     "deliverydate": "2017-11-28 00:00:00", 
     "suLN": "60", 
     "osLN": "1.4", 
     "osStatus": 100, 
     "VerifiedOn": null 
    }, 
    { 
     "ordernumber": 164377, 
     "deliverydate": "2017-11-28 00:00:00", 
     "suLN": "76", 
     "osLN": "1.4", 
     "osStatus": 100, 
     "VerifiedOn": null 
    }, 
    { 
     "ordernumber": 164377, 
     "deliverydate": "2017-11-28 00:00:00", 
     "suLN": "61", 
     "osLN": "1.4", 
     "osStatus": 100, 
     "VerifiedOn": null 
    }, 
    { 
     "ordernumber": 163868, 
     "deliverydate": "2017-11-08 00:00:00", 
     "suLN": "94", 
     "osLN": "3.8", 
     "osStatus": 1300, 
     "VerifiedOn": "2017-11-15 06:54:46" 
    }, 

제어기

$data   = DB 
       ::connection('s2') 
       ->select 
       (" 
       SELECT 
       `wo`.`ordernumber`, `wo`.`deliverydate`, 
       `su`.`ListNumber` as suLN, `os`.`ListNumber` as osLN, `su`.`LineNumber` as suLN, `os`.`LineNumber` as osLN, `os`.`status` as osStatus, 
       `su`.`VerifiedOn` 
       FROM 
       `wo`.`orders` AS `wo` 
       INNER JOIN 
        `pr`.`su` AS `su` 
        ON `wo`.`ordernumber` = `su`.`ordernumber` 
       INNER JOIN 
        `pr`.`orderstatus` AS `os` 
        ON `su`.`FrameNumber` = `os`.`boxnumber` 
        AND `wo`.`ordernumber` = `os`.`ordernumber` 
       WHERE 
       `wo`.`pID` = ? 
       ", 
       [$pID] 
      ); 

foreach ($data as $d) { 
    // check if object exists or create new object for each $d->ordernumber 
    // if object exists check if $d->LineNumber matches 
     // if LineNumber matches 
     $d->counter = $d->counter + 1; // new property created 
} 

return response()->json(['data' => $data], 200); 

답변

0
$new = array(); // Make a new array 
foreach ($data as $d) { // Loop over your data 
    $id = $d->ordernumber; // Get order number for each order 
    unset($d->ordernumber); // Remove order number from object 
    $new[$id][] = $d; // Insert object into new array using ordernumber as key 
} 
print_r($new); // Profit!! 
,617 이것의

출력은 다음과 같습니다 이제 루프 새로운 배열을 할 수

Array 
(
    [164377] => Array 
     (
      [0] => stdClass Object 
       (
        [deliverydate] => 2017-11-28 00:00:00 
        [suLN] => 60 
        [osLN] => 1.4 
        [osStatus] => 100 
        [VerifiedOn] => 
       ) 

      [1] => stdClass Object 
       (
        [deliverydate] => 2017-11-28 00:00:00 
        [suLN] => 76 
        [osLN] => 1.4 
        [osStatus] => 100 
        [VerifiedOn] => 
       ) 

      [2] => stdClass Object 
       (
        [deliverydate] => 2017-11-28 00:00:00 
        [suLN] => 61 
        [osLN] => 1.4 
        [osStatus] => 100 
        [VerifiedOn] => 
       ) 

     ) 

    [163868] => Array 
     (
      [0] => stdClass Object 
       (
        [deliverydate] => 2017-11-08 00:00:00 
        [suLN] => 94 
        [osLN] => 3.8 
        [osStatus] => 1300 
        [VerifiedOn] => 2017-11-15 06:54:46 
       ) 

     ) 

) 

count === 1 경우, 해당 번호에 대해 하나의 순서있을 수> (1) 당신이 할 필요가 무엇이든 처리 할 경우.

관련 문제