将数据推送到laravel php中的多维数组

时间:2016-12-21 18:58:39

标签: php laravel multidimensional-array

我想创建一个多维数组,以根据日期和类别保存数据,如下所示。然后我需要在我的刀片视图中显示这些数据?我该怎么做才能实现这一目标。

'2012-05-05' => array(
    'suspension' => 52,
    'transmission' => '58'
),
'2012-05-05' => array(
    'suspension' => 44,
    'transmission' => 21

我在我的控制器中完成了以下操作,我想要一个$ reportData变量来加载数据。

 public function loadReports(Request $request)
{
    $data = ['2012-05-05','2012-05-06'];
     $salesItems = array();



        $orderItems = OrderItem::with('spare', 'order')->get();

        foreach ($orderItems as $key => $orderItem) {


            if ($orderItem->spare->retailer_id == Auth::user()->id) {
                array_push($salesItems, $orderItem);
            }


        }
        $categories = App\Categories::all();

        foreach ($data as $date) {

            foreach ($categories as $category) {
                $categoryValue = 0;
                foreach ($salesItems as $salesItem) {
                    if ($date == $salesItem->order->orderDate) {
                        $categoryValue += $categoryValue + $salesItem->subTotal;
                    }
                }
                //error appears as illegal offset type
                $reportData[$date][$category]=$categoryValue;



            }
        }


    return View::make('Retailer/reports')->with('categories', $categories)->with('reportData', $reportData);
}

3 个答案:

答案 0 :(得分:0)

我还没有对它进行过测试,但是看看你的代码,似乎你把一个对象作为数组索引键作为二级数组索引传递:

$reportData[$date][$category] = $categoryValue;
                   ^^^^^^^^^ this is an object

将您的$category转储到foreach循环中&检查是否是这种情况:dd($category)

如果你正在使用 Eloquent &您的类别模型有一个名称属性,您可能希望将每个类别名称作为索引值:

$reportData[$date][$category->name] = $categoryValue;

答案 1 :(得分:0)

由于您尝试将Object用作数组索引,因此发生错误。

根据laravel文档(https://laravel.com/api/4.2/Illuminate/Database/Eloquent/Model.html#method_all),您在此处调用的所有方法' $ categories = App \ Category :: all();'会回来一个Eloquent Collection。

因此,当您遍历$ categories数组并引用$ category时,您正在引用一个对象。在PHP中,数组只能由整数或字符串索引。因此,您需要更改错误所在的代码行

$reportData[$date][$category->someVar] = $categoryValue;

其中someVar是Eloquent模型类别中引用其名称的变量的名称,例如' suspension'等

答案 2 :(得分:0)

虽然它没有回答您的问题,但您可以使用Eloquent引擎让您的生活更轻松:

$orderItems = OrderItem::with('spare', 'order')->get();

foreach ($orderItems as $key => $orderItem) {
    if ($orderItem->spare->retailer_id == Auth::user()->id) {
        array_push($salesItems, $orderItem);
    }
}

可以通过以下方式简化(并提高效率):

// Store the uid to save the call.
$user_id = Auth::user()->id;

// Apply the condition to the Eloquent query.
$orderItems = OrderItem::with(['spare' => function($query) use ($user_id) {
        return $query->where('retailer_id', '=', $user_id);
}, 'order'])->get();

其他答案是正确的,但您可能还想在开始使用之前初始化$reportData数组。