Collection-> gt; put () не работает в Laravel 5.2

Я работаю с Laravel впервые. У меня есть сценарий, в котором у меня есть таблица «Продукты», в которой содержатся основные сведения о товаре (гофроящик), такие как длина, ширина, высота и т. Д. Некоторые другие сведения о продукте рассчитываются с использованием основных данных в функции.

Мой код в контроллере выглядит так:

контроллер:

$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

1

Решение

Вы получаете массив от Query Builder. Помощник 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());

Больше информации

1

Другие решения

Query Builder не возвращает коллекцию при вызове get, он возвращает массив:

Как и необработанные запросы, метод get возвращает массив результатов, где каждый результат является экземпляром объекта PHP StdClass.

Если вы хотите коллекцию Eloquent, вам нужно будет использовать модель Eloquent или использовать collect() вспомогательная функция, как предполагает @Martin.

0

put() метод устанавливает заданный key а также value в коллекции:

Вы пытаетесь сохранить объект массива в $rollSize,

В модели делают roll_size сериализовать объект, если вы хотите сохранить rollSize как массив в базе данных.

0
По вопросам рекламы [email protected]