【问题标题】:Passing array of arrays to blade将数组数组传递给刀片
【发布时间】:2019-05-07 21:08:32
【问题描述】:

我在将数组从控制器传递到 Laravel 中查看时遇到问题。我做了一些研究,但没有一个主题有帮助。我的表格是商店、商品、商品价格。 Shops 包含商店 id,我从 url application/id 获取它以供使用。在商品价格中,我得到了诸如 shop_id 、 item_id (这两个是 FK)、价格之类的信息。此表显示哪些商品在哪些商店中。在项目中,我有关于项目的信息:id、图片。当我转到 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($products); 调试数组时我明白了:

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 as $product) 并且我得到错误:

试图获取非对象的属性“img_dir”。

任何帮助将不胜感激。

【问题讨论】:

    标签: php arrays laravel


    【解决方案1】:

    这样试试

    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'));
    }
    

    【讨论】:

      【解决方案2】:

      $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']));
      }
      

      【讨论】:

      • 这导致其他错误:此集合实例上不存在属性 [img_dir]。当我调试它时,集合只显示第一个项目信息。
      【解决方案3】:

      看看这一行

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

      $products 是一个数组,您分配一个新元素,该元素是一个由查询的数组值(包含数组)组成的数组。

      所以你有一个 3 级嵌套数组,这会导致混乱。

      你为什么不直接发送到你的刀片视图$products = Item::where('id',$item)->get();

      【讨论】:

      • 因为这种方式视图只显示一项信息。
      猜你喜欢
      • 1970-01-01
      • 2018-09-19
      • 2021-11-11
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 2020-06-24
      • 2021-01-21
      • 2018-08-24
      相关资源
      最近更新 更多