【问题标题】:Laravel collection->push() not working properlyLaravel collection->push() 无法正常工作
【发布时间】:2020-05-19 02:18:50
【问题描述】:

我想收集产品并推送到会话购物车。

$product= Product::find(1);
$product2= Product::find(2);

session(['cart' => collect($product)]);

session(['cart' => session('cart')->push($product2)])

这是我的输出,带有一些虚拟数据。

{
  "0": {
    "id": 2,
    "sku": "SKU914",
    "price": 1.0,
    "special_price": 0.91,
    "weight": 763,
    "barcode": "0434120288572",
    "created_at": "2020-01-31 14:39:53",
    "updated_at": "2020-01-31 14:39:53"
  },
  "id": 1,
  "sku": "SKU579",
  "price": 22.8,
  "special_price": 19.14,
  "weight": 478459,
  "barcode": "1390377688",
  "created_at": "2020-01-31 14:34:59",
  "updated_at": "2020-01-31 14:34:59"
}

我推送的第二个产品 ($product2) 超出了数组。 我该怎么做才能让它像"0": {}, "1": {}

【问题讨论】:

    标签: php laravel laravel-collection


    【解决方案1】:

    你不需要合并任何东西

    2 个查询会很慢,所以最好只运行一个查询

    $Ids = [1,2];
    if(true) { // can add any condtion here
       array_push(3); // if you need to push new id
    }
    $product= Product::whereIn("id",$Ids)->get();
    session(['cart' => $product]);
    

    你可以申请whereIn()条件

    【讨论】:

    • 你不需要使用collect,它已经是一个集合了。
    • 并将where更改为whereIn
    • 我想单独使用,因为产品是用户一一添加的
    • @BlackLotus 现在检查您可以推送任意数量的 id,但 SQL 查询将是单一且快速的
    【解决方案2】:

    根据您的要求,只需像这样使用

    session(['cart' => collect($product)]);
    
    $card1[] = session('cart');
    $card1[] = collect($product1);
    session(['cart' => $card1])
    
    $card2[] = session('cart');
    $card2[] = collect($product2);
    session(['cart' => $card2])
    

    或者你可以使用 whereIn()

    $products = Product::whereIn("id",[1,2])->get()->toArray();
    session(['cart' => $products])
    

    或者可以使用array_merge

    session(['cart' => collect($product)]);
    
    $cart = array_merge(session('cart'),collect($product2));
    session(['cart' => $cart])
    

    【讨论】:

    • 我想单独使用,因为产品是用户一一添加的
    • 你检查过array_merge了吗??
    • array_merge 不能与 collect 方法一起使用
    【解决方案3】:

    只需将 $product 放入一个数组中。

    session(['cart' => collect([$product])]);
    session(['cart' => session('cart')->push($product2)]);
    

    或者直接推

    session(['cart' => session('cart')->push($product)]);
    session(['cart' => session('cart')->push($product2)]);
    

    【讨论】:

      猜你喜欢
      • 2018-06-03
      • 2015-09-06
      • 2013-06-07
      • 1970-01-01
      • 2021-04-06
      • 2018-01-17
      • 2018-04-24
      • 2017-10-15
      • 2016-12-28
      相关资源
      最近更新 更多