Передача массива массивов на лезвие - PullRequest
1 голос
/ 08 мая 2019

У меня проблема с передачей массива массивов из контроллера для просмотра в Laravel.Я провел некоторые исследования, но ни одна из тем не помогла.Мои столы - Магазины, Предметы, Предметы Цена.Магазины содержат идентификатор магазина, который я получаю для использования из URL-адреса приложения / идентификатора.В Item Items я получил такую ​​информацию, как shop_id, item_id (это два FK), цена.Эта таблица показывает, какие товары находятся в каких магазинах.И в пунктах у меня есть информация об элементах: идентификатор, изображение.Когда я захожу в application / 1, я хочу, чтобы сайт показывал информацию, находящуюся в этом конкретном магазине, информацию.

Мой метод контроллера:

    public function getItems($id)
    {
$items=ItemPrice::where('shop_id', $id)->select('item_id')->get()->toArray();
foreach($items as $item)
 $products[] = array(Item::where('id',$item)->get()->toArray());
 $shops=Shop::all();
 return view('shop')->with(compact(['products','shops']));
   }

при отладке массива с помощью dd ($ продуктов);Я получаю:

array:4 [▼
  0 => array:1 [▼
    0 => array:1 [▼
      0 => array:5 [▼
        "id" => 1
        "name" => "Item1"
        "price" => 0.8
        "type" => 2
        "img_dir" => "svg/d.jpg"
      ]
    ]
  ]
  1 => array:1 [▼
    0 => array:1 [▼
      0 => array:5 [▼
        "id" => 2
        "name" => "Item2"
        "price" => 1.1
        "type" => 2
        "img_dir" => "svg/d2.jpg"
      ]
    ]
  ]
  2 => array:1 [▼
    0 => array:1 [▼
      0 => array:5 [▼
        "id" => 3
        "name" => "Item3"
        "price" => 3.1
        "type" => 5
        "img_dir" => "svg/p1.jpg"
      ]
    ]
  ]
  3 => array:1 [▼
    0 => array:1 [▼
      0 => array:5 [▼
        "id" => 4
        "name" => "Item4"
        "price" => 1.56
        "type" => 5
        "img_dir" => "svg/p2.jpg"
      ]
    ]
  ]
]

Я имею в виду foreach @foreach ($ products как $ product) и получаю сообщение об ошибке:

Попытка получить свойство 'img_dir' не-объекта.

Любая помощь будет оценена.

Ответы [ 3 ]

0 голосов
/ 08 мая 2019

Посмотрите на эту строку

$products[] = array(Item::where('id',$item)->get()->toArray());

$products - это массив, и вы присваиваете новый элемент, который представляет собой массив из значения массива вашего запроса (который содержит массив).

Итак, у вас есть 3-уровневый вложенный массив, который приводит к путанице.

Почему бы вам просто не отправить в свой блэйд-вид $products = Item::where('id',$item)->get();?

0 голосов
/ 08 мая 2019

Попробуйте вот так

public function getItems($id)
{
    $items = ItemPrice::where('shop_id', $id)
        ->select('item_id')
        ->pluck('item_id')
        ->toArray();
    $products = Item::whereIn('id', $items)->get();
    $shops = Shop::all();

    return view('shop', compact('products','shops'));
}
0 голосов
/ 08 мая 2019

У вас есть несколько вложенных массивов в $products. То, что вы считаете продуктом, на самом деле является массивом. Может быть, если вы упростите переменное содержимое $products:

public function getItems($id) {
    $items = ItemPrice::where('shop_id', $id)->select('item_id')->get()->toArray();
    $products = [];
    foreach($items as $item) {
        $products[] = Item::where('id',$item)->get();
    }
    $shops = Shop::all();

    return view('shop')->with(compact(['products', 'shops']));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...