Итерация коллекций Laravel с циклом foreach - PullRequest
0 голосов
/ 08 июня 2018

order model product model

это простой запрос в контроллере с использованием модели заказа:

$orders = Order::where('user_id', auth()->user()->id)
                        ->orderBy('created_at', 'desc')
                        ->get();
return dd($orders);

dd дает следующеерезультаты: (что правильно)

Collection {#269 ▼
  #items: array:2 [▼
    0 => Order {#270 ▼
      #dates: array:1 [▶]
      #fillable: array:6 [▶]
      #connection: "mysql"
      #table: null
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:9 [▶]
      #original: array:9 [▶]
      #changes: []
      #casts: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
      #forceDeleting: false
    }
    1 => Order {#271 ▼
      #dates: array:1 [▶]
      #fillable: array:6 [▶]
      #connection: "mysql"
      #table: null
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:9 [▶]
      #original: array:9 [▶]
      #changes: []
      #casts: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: []
      #touches: []
      +timestamps: true
      #hidden: []
      #visible: []
      #guarded: array:1 [▶]
      #forceDeleting: false
    }
  ]
}

но когда я перебираю цикл foreach для коллекции $ orders, отображается только первый массив, второй массив недоступен ... что не так с циклом foreach...?

$temp='';
        foreach($orders as $order){
                $temp.= $order->product; // accessing the belongTo method
        }

        dd($temp);

здесь вывод (показан только один массив):

"{"id":13,"created_at":"2018-06-06 15:28:21","updated_at":"2018-06-06 18:36:28","type":0,"title":"product 3","description":"this is product no 3 with 5 images","images":"night-product-watch-dramatic-84475_1528310188.jpeg,night-product-watch-dramatic-84475_1528310188.jpeg","alive":1,"user_id":1,"deleted_at":null} ◀"

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Попробуйте это:

$temp= [];
foreach($orders->all() as $order){
     $temp[] = $order->product;
}

И вы можете редактировать свой запрос

$orders = Order::where('user_id', auth()->user()->id)
                    ->with('products')
                    ->orderBy('created_at', 'desc')
                    ->get();
0 голосов
/ 08 июня 2018

Если вы строите массив продуктов по всем заказам, вы не можете использовать конкатенацию строк.Используйте массив и помещайте в него элементы.

$products = [];
foreach ($orders as $order) {
    if ($order->product) {
        $products[] = $order->product;
    }
}
dd($products); // will be an array of all other products.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...