【问题标题】:Trying to access to array in view return Trying to get property of non-object试图访问视图中的数组返回试图获取非对象的属性
【发布时间】:2019-01-22 13:49:08
【问题描述】:

我正在使用 Laravel 5.2,我正在尝试执行存储过程并使用 foreach 循环在视图中显示结果。当我运行我的应用程序时,我收到以下错误消息:

试图获取非对象的属性

如果我使用 return 或 dump 我会得到以下结果:

这是我的控制器代码:

public function VentasPorSucursal() {
    $values = [1, 25, 2, "NULL", "2018-08-10", "2018-08-10", "NULL", "NULL"];

    $data['data'] = DB::select('SP_RPT_VENTAS2 ?, ?, ?, ?, ?, ?, ?, ?', $values);

    //dump($data);
    return view('reportes.index')->with('data', $data);
}

这是我的 index.blade.php

<div class="table-responsive">
        <table class="table table-striped table-bordered table-condensed table-hover">
            <thead>
                <th>Folio</th>
                <th>Fecha</th>
                <th>Sucursal</th>
                <th>Vendedor</th>
                <th>Cantidad</th>
                <th>Unidad</th>
                <th>Descripción</th>
                <th>Pzaz x Pq</th>
                <th>Precio</th>
                <th>Total</th>
                <th>Total Pzaz. Vendidas</th>
            </thead>
            @foreach ($data as $result)
                <tr>
                    <td>{{ $data->Folio }}</td>
                    <td>{{ $data->Fecha }}</td>
                    <td>{{ $data->Sucursal }}</td>
                    <td>{{ $data->Vendedor }}</td>
                    <td>{{ $data->Cantidad }}</td>
                    <td>{{ $data->Unidad }}</td>
                    <td>{{ $data->Descripcion }}</td>
                    <td>{{ $data->PzasxPq }}</td>
                    <td>{{ $data->Precio }}</td>
                    <td>{{ $data->Total }}</td>
                    <td>{{ $data->TotalPzasVendidas }}</td>
                </tr>

            @endforeach
        </table>
    </div>
    {{$data->render()}}

寻找答案我发现使用'->'它是一个数组,也许我的代码将结果作为一个对象返回,我需要使用'[]'但我不知道我该怎么做它。

可能是什么问题?

【问题讨论】:

    标签: php laravel laravel-5 laravel-5.2


    【解决方案1】:

    查看您的转储结果。您传递给视图的数据数组包含一个 data 键,其中包含从查询返回的所有对象。所以你可以像这样循环遍历数据变量数据对象:

    @foreach ($data['data'] as $result)
    <tr>
       <td>{{ $result->Folio }}</td>
       <td>{{ $result->Fecha }}</td>
       <td>{{ $result->Sucursal }}</td>
       <td>{{ $result->Vendedor }}</td>
       <td>{{ $result->Cantidad }}</td>
       <td>{{ $result->Unidad }}</td>
       <td>{{ $result->Descripcion }}</td>
       <td>{{ $result->PzasxPq }}</td>
       <td>{{ $result->Precio }}</td>
       <td>{{ $result->Total }}</td>
       <td>{{ $result->TotalPzasVendidas }}</td>
    </tr>
    @endforeach
    

    【讨论】:

    • 谢谢!那是我的问题。
    【解决方案2】:

    您的第一个问题是在foreach 循环中,我在下面重置了第二个问题 如果返回结果是一个数组,可以像下面这样访问。

      @foreach ($data as $result)
                <tr>
                    <td>{{ $result["Folio"]}}</td>
                    <td>{{ $result["Fecha"] }}</td>
                    <td>{{ $result["Sucursal"] }}</td>
                    <td>{{ $result["Vendedor"] }}</td>
                    <td>{{ $result["Cantidad"] }}</td>
                    <td>{{ $result["Unidad"] }}</td>
                    <td>{{ $result["Descripcion"] }}</td>
                    <td>{{ $result["PzasxPq"] }}</td>
                    <td>{{ $result["Precio"] }}</td>
                    <td>{{ $result["Total"] }}</td>
                    <td>{{ $result["TotalPzasVendidas"] }}</td>
                </tr>
    
            @endforeach
    

    【讨论】:

    • 仅供参考:如果缺少该字段更容易使用array_get('Cantidad')
    • 字段缺失是什么意思。抱歉,如果没有得到您想要的,请澄清。
    • @jycr753 array_get() array_get 函数使用“点”表示法从深度嵌套的数组中检索值: $array = ['products' => ['desk' => ['price' = > 100]]]; $price = array_get($array, 'products.desk.price');参考:laravel.com/docs/5.6/helpers
    • 我无法测试您的代码,但无法访问数组中的数据,所以看看我的答案。
    • 您的@foreach 已关闭;你想循环$data["data"],而不仅仅是$data。此外,$data["data"] 是一个包含 stdClass 对象的数组,因此 $result 不是数组,[] 语法也不起作用。需要使用-&gt;访问器。
    猜你喜欢
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多