2016-07-27 19 views
1

私は初めてLaravelで作業しています。長さ、幅、高さなどの製品(段ボール箱)の基本的な詳細を含むProductsテーブルがあるシナリオがあります。製品のその他の詳細は、関数内の基本的な詳細を使用して計算されます。Laravel 5.2でコレクション - > 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()ヘルパーはあなたのソリューションです。

モデルでは、databaseに配列としてrollSizeを格納する場合は、roll_sizeをserializeするオブジェクトを作成します。

関連する問題