在Laravel Collection

时间:2017-02-28 05:00:05

标签: laravel

我有一个Laravel集合,其中包含用户购物车中的商品列表。下面是我获取该集合的代码:

$items = Cart_Item::all();
$user = JWTAuth::parseToken()->toUser();
$items = $items->where('user_id', $user->id);
$items = $items->map(function ($item, $key) {
    return collect($item)->except(['user_id', 'ip_address', 'created_at', 'updated_at'])->toArray();
});

有了这个,我得到以下输出:

{
    "data": [
        {
            "id": 1,
            "product_id": 1,
            "quantity": 2
        }
    ]
}

现在,我想使用product_id模型将product替换为我的实际产品名称,并使用price模型添加名为product_pricing的字段。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

如果您正确设置了关系,则可以执行以下操作:

$items = $items->map(function ($item, $key) {
  $product = Product::with('price')->where('id', $item->product_id)->first();
  return [
     'id'    => $item->id,
     'product_id' => $item->product_id,
     'quantity' => $item->quantity,
     'name'  => $product->name,
     'price' => $product->price->amount,
  ];
});

或手动内连接方式:

$product = Product::select('*')
 ->join('product_pricing as pp', 'pp.product_id', '=', 'product.id')
 ->where('product.id', $item->product_id)
 ->first();