【问题标题】:Laravel 5.8: Trying to get property 'order' of non-objectLaravel 5.8:试图获取非对象的属性“顺序”
【发布时间】:2021-10-08 07:34:29
【问题描述】:

我正在开发一个 Laravel 5.8 项目,它是一个在线商店。在这个项目中,我想为管理员添加“打印顺序因素”功能。

所以我做了一个这样的表格:

<form method="POST" action="{{ route('orders.newprint') }}">
    @csrf
    @forelse($orders as $order)
    <tr>
        <td><input class="form-check-input" name="orderCheck[]" type="checkbox" value="{{ $order->ord_id }}">&nbsp;</td>
        <td>{{ $order->ord_id }}</td>
        <td>{{ $order->status_label }}</td>
        <td>{{ $order->customer_name }}</td>
        <td>{{ $order->ord_total }}</td>
    </tr>
    @empty
        <td colspan="7" class="text-center">No order to show</td>
    @endforelse
</form>

所以基本上管理员可以像这样选择多个订单:

我正在尝试将订单 ID 作为数组发送:

&lt;input class="form-check-input" name="orderCheck[]" type="checkbox" value="{{ $order-&gt;ord_id }}"&gt;

所以在点击Print All Order Factors后,它应该会在一页显示所有的order Factors

所以为了做到这一点,我在 Controller 中添加了这个方法:

public function prnpriview(Request $request)
    {
        $args = [];
        $orders = $request->input('orderCheck');
        foreach($orders as $ord){
            $order = Order::find($ord);
            $args[] = [
                'order'  => $order,
                'address'  => $order->order_address->first(),
                'details'  => $order->orderDetail,
                'sendType'  => $order->productSubmit,
                'coupons'  => $this->cartController->computeDiscountForOutRequests($order->ord_object_id, $order->ord_creator_id),
                'user'      => User::query()->find($order->ord_creator_id)
            ];

        }
        return view('admin.shop.orders.newprint', compact('args'));
    }

然后在 Blade 上,我尝试了这个:

 @foreach($args as $arg)
    <p>Buyer Name:
        <strong>
            {{ $arg->order->customer_name }}
        </strong>
    </p>
    <p>Address:
        <strong>
            {{ $arg->address->province_relation->prv_name }}،
            {{ $arg->address->city_relation->cit_name }}،
            {{ $arg->address->address }}
        </strong>
    </p>
    ...
@endforeach

但我收到此错误:

试图获取非对象的属性“顺序”(查看:newprint.blade.php)

【问题讨论】:

  • 嗯......你正在将 $args 形成为一个多维数组,而不是一个对象数组。使用数组语法进行测试。即:@foreach($args as $arg) {{ $arg['order']-&gt;customer_name }}
  • 谢谢你。你可以把它作为答案。 @porloscerrosΨ

标签: php laravel laravel-5.8


【解决方案1】:

在您的控制器中,您将 $args 形成为一个多维数组,而不是一个对象数组。

所以在您看来,您应该使用数组语法。

即:

@foreach($args as $arg) 
    {{ $arg['order']->customer_name }}
    {{ $arg['address']->province_relation->prv_name }}،
// ... and so
@endforeach

【讨论】:

    【解决方案2】:

    感谢您的建议,这部分可以改进:

        foreach($orders as $ord){
            $order = Order::find($ord);
            $args[] = [
                'order'  => $order,
                'address'  => $order->order_address->first(),
                'details'  => $order->orderDetail,
                'sendType'  => $order->productSubmit,
                'coupons'  => $this->cartController->computeDiscountForOutRequests($order->ord_object_id, $order->ord_creator_id),
                'user'      => User::query()->find($order->ord_creator_id)
            ];
    
        }
    

    您可以在循环外使用find() 来降低时间复杂度。由于 find() DOES 接受 array 作为 Laravel 核心中的参数:

    src/Illuminate/Database/Eloquent/Builder.php

      public function find($id, $columns = ['*'])
        {
            if (is_array($id) || $id instanceof Arrayable) {
                return $this->findMany($id, $columns);
            }
    
            return $this->whereKey($id)->first($columns);
        }
    

    所以你可能想要这样的东西:

    $order = Order::find($request->input('orderCheck'));
    foreach($orders as $ord){        
        $args[] = [
            'order'  => $order,
            'address'  => $order->order_address->first(),
            'details'  => $order->orderDetail,
            'sendType'  => $order->productSubmit,
            'coupons'  => $this->cartController->computeDiscountForOutRequests($order->ord_object_id, $order->ord_creator_id),
            'user'      => User::query()->find($order->ord_creator_id)
        ];
    }
    

    我想现在复杂度是O(n) 代替了O(n^2)

    【讨论】:

      猜你喜欢
      • 2019-12-31
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      相关资源
      最近更新 更多