Laravel从2张桌子中选择

时间:2018-10-03 09:21:17

标签: php laravel eloquent

我已经搜索了很多,找不到解决方案。我有3个表,一个shopping_carts表,一个产品,最后是一个items表。我已经创建了一个eshop,我想在用户单击“添加到购物车”按钮后显示每种产品的数量。我的代码在下面,但是仅返回item表中存在的产品及其逻辑。我需要项目表中该产品的数量,但我还需要产品表中的其余产品。

 return $query = Product::select('title','price','imageUrl','quantity','products.id')
           ->join('items','items.product_id','=','products.id')
           ->where('shopping_cart_id', '=' ,$id)->get();

购物车 enter image description here

产品 enter image description here

项目 enter image description here

3 个答案:

答案 0 :(得分:0)

您可以通过两种方式实现这一目标:-

第一个是通过使用此处https://laravel.com/docs/5.7/eloquent-relationships

的关系

第二个是通过修改现有查询:-

return $query = Product::select('title','price','imageUrl','quantity','products.id')
       ->leftJoin('items','items.product_id','=','products.id')
       ->where('shopping_cart_id', '=' ,$id)->get();

答案 1 :(得分:0)

尝试一下

$products = DB::table('items')
    ->join('products', 'items.product_id', '=', 'products.id')
    ->where('shopping_cart_id', '=' , $id)
    ->get();

或使用关系

class ShoppingCart extends Model
{
    public function items()
    {
        return $this->hasMany('App\Item');
    }
}

class Item extends Model
{
    public function product()
    {
         return $this->belongsTo('App\Product');
    }
}

然后使用

$shopping_cart = ShoppingCart::with(['items', 'items.product'])->find($id);

所有产品的最新答案

Product::select('products.id', 'products.title', 'products.price', 'products.imageUrl', 
                 DB:raw('(CASE WHEN items.qunatity IS NULL THEN 0 ELSE items.qunatity END) as quantity')
       ->leftJoin('items', function($join) use($id){
            $join->on('products.id', '=', 'items.product_id')
                ->on('items.shopping_cart_id', '=', $id);
        })->get();

答案 2 :(得分:0)

我找到了答案,对noufalcep代码进行了一些更改

return Product::select('products.id', 'products.title', 'products.price', 'products.imageUrl',
           DB::raw('CASE WHEN items.quantity IS NULL THEN 0 ELSE items.quantity END as quantity'))
       ->leftJoin('items', function($join) use($id){
           $join->on('products.id', '=', 'items.product_id')
               ->where('items.shopping_cart_id', '=', $id);
       })->get();