Laravel 5 array:不能将stdClass类型的对象用作数组

时间:2019-07-30 02:03:47

标签: php laravel laravel-5

我正在尝试从数据库中获取项目,并将其放入“ laravel-paypal”包所需的格式:

$data['items'] = [
    [
        'name' => 'Product 1',
        'price' => 9.99,
        'desc'  => 'Description for product 1'
        'qty' => 1
    ],
    [
        'name' => 'Product 2',
        'price' => 4.99,
        'desc'  => 'Description for product 2',
        'qty' => 2
    ]
];

所以我有一个很好的查询:

$order_items = DB::table('order_items')
                        ->where('order_id', $order['id'])
                        ->join('products', 'order_items.product_id', '=', 'products.id')
                        ->selectRaw('products.name, order_items.price + order_items.tax as price, order_items.quantity as qty')
                        ->get()
                        ->toArray();

哪种产量:

array:2 [▼
  0 => {#296 ▼
    +"name": "fugit"
    +"price": 727.82
    +"qty": 1
  }
  1 => {#298 ▼
    +"name": "MEMBERSHIP"
    +"price": 35.0
    +"qty": 1
  }
]

但是当我尝试将其放入所需的数组中时:

$data = [];
$data['items'] = $order_items;

我收到错误消息:

Symfony \组件\调试\异常\ FatalThrowableError(E_ERROR) 不能将stdClass类型的对象用作数组

详细信息:

 protected function setCartItems($items)
    {
        return (new Collection($items))->map(function ($item, $num) {
            return [
                'L_PAYMENTREQUEST_0_NAME'.$num  => $item['name'],
                'L_PAYMENTREQUEST_0_AMT'.$num   => $item['price'],
                'L_PAYMENTREQUEST_0_DESC'.$num  => isset($item['desc']) ? $item['desc'] : null,
                'L_PAYMENTREQUEST_0_QTY'.$num   => isset($item['qty']) ? $item['qty'] : 1,
            ];
        })->flatMap(function ($value) {
            return $value;
        });

我已经阅读了此错误消息的所有解决方案,他们都说我拥有的是对象数组,而不是数组数组,这就是为什么我收到此消息的原因。我知道了。他们都说我必须使用$order_items->price访问数据。我明白了。

但是我需要数组形式的数组中的数据,并且由于它是嵌套数组,所以我什至无法弄清楚如何使用foreach循环来实现它。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

例如,您可以将Type Casting对象用于这样的数组:

 protected function setCartItems($items)
{
    return (new Collection($items))->map(function ($item, $num) {
        $itemArray = (array) $item;
        return [
            'L_PAYMENTREQUEST_0_NAME'.$num  => $itemArray ['name'],
            'L_PAYMENTREQUEST_0_AMT'.$num   => $itemArray ['price'],
            'L_PAYMENTREQUEST_0_DESC'.$num  => isset($itemArray ['desc']) ? $itemArray ['desc'] : null,
            'L_PAYMENTREQUEST_0_QTY'.$num   => isset($itemArray ['qty']) ? $itemArray ['qty'] : 1,
        ];
    })->flatMap(function ($value) {
        return $value;
    });