2016-07-27 5 views
1

Laravel에서 처음으로 작업하고 있습니다. 나는 길이, 넓이, 높이 등과 같은 Product (골판지 상자)의 기본 세부 사항을 포함하는 Products 테이블을 가지고있다. 제품의 다른 세부 사항은 함수 내 기본 세부 사항을 사용하여 계산된다.Laravel 5.2에서 Collection-> put()이 작동하지 않습니다.

컨트롤러에 내 코드는 다음과 같습니다

컨트롤러 :

$products = DB::table('master_products') 
      ->join('part_types', 'master_products.part_type_id', '=', 'part_types.id') 
      ->join('box_types', 'master_products.box_type_id', '=', 'box_types.id') 
      ->select('master_products.*', 'part_types.part_type', 'box_types.box_type') 
      ->get(); 

    /* Calculate Specs and add them to the collection */ 
    foreach ($products as $product) { 
     $rollSize = $this->calcRollSize($product->height, $product->breadth, $product->ply, $product->part_type_id, $product->box_type_id); 
     $products->put('roll_size', $rollSize); 
    } 

return view('/layouts/masters/products-master', ['products' => $products]); 

보기 :

<table class="table table-bordered table-condensed table-hover"> 
      <thead> 
       <tr> 
        <th>Sl.No.</th> 
        <th>Product Code</th> 
        <th>Part Type</th> 
        <th>Box Type</th> 
        <th>Length</th> 
        <th>Breadth</th> 
        <th>Height</th> 
        <th>Ply</th> 
        <th>Roll Size</th> 
        <th>A-Base</th> 
        <th>A-Flute</th> 
        <th>B-Base</th> 
        <th>B-Flute</th> 
        <th>Top</th> 
       </tr> 
      </thead> 
      <tbody>      
       @foreach($prod_specs as $prod_spec) 
       <tr> 
        <td><?php echo $i; ?></td> 
        <td><?php echo $prod_spec->product_code; ?></td> 
        <td><?php echo $prod_spec->part_type; ?></td> 
        <td><?php echo $prod_spec->box_type; ?></td> 
        <td><?php echo $prod_spec->length; ?></td> 
        <td><?php echo $prod_spec->breadth; ?></td> 
        <td><?php echo $prod_spec->height; ?></td> 
        <td><?php echo $prod_spec->ply; ?></td> 
        <td><?php echo $prod_spec->roll_size; ?></td> 
        <td><?php echo $prod_spec->gsm_a_base; ?></td> 
        <td><?php echo $prod_spec->gsm_a_flute; ?></td> 
        <td><?php echo $prod_spec->gsm_b_base; ?></td> 
        <td><?php echo $prod_spec->gsm_b_flute; ?></td> 
        <td><?php echo $prod_spec->gsm_top; ?></td> 
       </tr> 
       <?php $i++; ?> 
       @endforeach 
      </tbody> 
     </table> 

내가 가진이 예외 : 전화 멤버 함수에 비 객체에 put()을 사용합니다.

하지만 this stackoverflow question 님의 답변에 따르면 작동 할 것으로 예상됩니다. 내가 여기서 무엇을 놓치고 있니?

업데이트 :

:

foreach ($products as $product) { 
    $rollSize = $this->calcRollSize($product->height, $product->breadth, $product->ply, $product->part_type_id, $product->box_type_id); 
    $product['roll_size'] = $rollSize; 
} 

시도는 오류

답변

0

Query Builderget를 호출 할 때 컬렉션을 반환하지 않습니다, 그것은 배열을 반환 Cannot use object of type stdClass as array

있어

원시 쿼리와 마찬가지로 get 메소드는 각 결과가 PHP StdClass 객체의 인스턴스 인 결과 배열을 반환합니다.

Eloquent 컬렉션을 원한다면 Eloquent 모델을 사용하거나 @Martin 제안과 같이 collect() 도우미 기능을 사용해야합니다.

+0

오케이. 내 잘못이야. 그래서이 경우'roll_size'를'$ products' 배열에 어떻게 추가 할 수 있습니까 ?? –

+0

다른 배열에 뭔가를 추가하는 것과 같습니다 : $ products [ 'roll_size'] = $ rollSize' –

+0

'dd ($ product)'를 루프 안에 넣고 질문을 출력으로 업데이트하십시오. 또한이 루프가 실행 된 후에는 'roll_size'의 _one_ 인덱스 만 존재합니다. 롤 크기의 배열이 필요한 경우 디자인을 재고해야 할 수도 있습니다. –

1

쿼리 작성기에서 배열을 가져 왔습니다. 당신이 $ rollSize에 배열 객체를 저장하려는

:

$products = collect(DB::table('master_products') 
      ->join('part_types', 'master_products.part_type_id', '=', 'part_types.id') 
      ->join('box_types', 'master_products.box_type_id', '=', 'box_types.id') 
      ->select('master_products.*', 'part_types.part_type', 'box_types.box_type') 
      ->get()); 

More info

0

put 메소드는 컬렉션에 지정된 키와 값을 설정합니다 : 수집 Laravel() 헬퍼는 솔루션입니다.

모델에서 rollSize를 데이터베이스에 배열로 저장하려는 경우 roll_size를 serialize합니다.