1

私は初めてLaravelを使用しています。長さ、幅、高さなどの製品 (段ボール箱) の基本的な詳細を含む Products テーブルがあるシナリオがあります。製品のその他の詳細は、関数内の基本的な詳細を使用して計算されます。

コントローラーの私のコードは次のようになります。

コントローラ:

$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() を呼び出す

しかし、このスタックオーバーフローの質問の受け入れられた回答によると、それはうまくいくはずです。ここで何が欠けていますか?

アップデート:

これを試した

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; 
}

エラーが発生しましたCannot use object of type stdClass as array

4

3 に答える 3

1

クエリ ビルダーから配列を取得しています。Laravel collect() ヘルパーが解決策です:

$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());

より詳しい情報

于 2016-07-27T15:48:35.403 に答える
0

このput()メソッドは、指定されたkeyandvalueをコレクションに設定します。

に配列オブジェクトを保存しようとしています$rollSize

データベースに配列としてroll_size保存する場合は、モデルでオブジェクトをシリアル化します。rollSize

于 2016-09-04T15:12:19.603 に答える
0

Query Builderは、を呼び出したときにコレクションをget返さず、配列を返します。

生のクエリと同様に、get メソッドは結果の配列を返します。各結果は PHP StdClass オブジェクトのインスタンスです。

Eloquent コレクションが必要な場合は、Eloquent モデルを使用するか、collect()@Martin が提案するヘルパー関数を使用する必要があります。

于 2016-07-27T15:45:18.463 に答える