[英]laravel join subquery on condition
我有兩種產品。 游戲和游戲時間。
在我的代碼中。 order_items
表的item_id
列,表示目標產品的 id(可以是game_codes
或game_time_codes
的 id)
並且product_type_id
代表產品種類的 id(數字 1 代表 gameCode 和 2 代表 gametime )
在我的代碼中,我試圖顯示帶有購買項目信息的特定用戶訂單。
如果 product_type_id 為 1,我應該加入game_codes
如果 product_type_id 為 2,則加入game_time_codes
我寫了這個查詢,但它返回 null。 我怎樣才能解決這個問題?
$joinGCSub = DB::table("game_codes")->where("user_id", 1)->where("sold", 1);
$joinGTSub = DB::table("game_time_codes")->where("user_id", 1)->where("sold", 1);
$orders = DB::table('orders')
->leftJoin("order_items", "orders.id", "=", "order_items.order_id")
->leftJoin("product_types", "order_items.product_type_id", "=", "product_types.id")
->joinSub($joinGCSub, "gc" , function ($join){
$join->on('order_items.item_id', "=", "gc.id")->where("product_types.id", 1);
})->joinSub($joinGTSub, "gt", function($join) {
$join->on('order_items.item_id', "=", "gt.id")->where("product_types.id", 2);
})
->where("orders.user_id", 1)
->get();
dd($orders);
您可以在下面看到表格結構
訂購表
id | user_id | .... etc
order_items 表 TABLE
id | order_id | product_type_id | item_id ...etc
游戲代碼表
id | code | user_id | sold ... etc
游戲時間代碼表
id | code | user_id | sold ...etc
可以這樣寫:
$joinGCSub = DB::table("game_codes")->where("user_id", 1)->where("sold", 1);
$joinGTSub = DB::table("game_time_codes")->where("user_id", 1)->where("sold", 1);
$query = DB::table('orders')
->leftJoin("order_items", "orders.id", "=", "order_items.order_id")
->leftJoin("product_types", "order_items.product_type_id", "=", "product_types.id");
if ($product_type_id == 1)
$query->joinSub($joinGCSub, "gc", function ($join) {
$join->on('order_items.item_id', "=", "gc.id")->where("product_types.id", 1);
});
if ($product_type_id == 2)
$query->joinSub($joinGTSub, "gt", function ($join) {
$join->on('order_items.item_id', "=", "gt.id")->where("product_types.id", 2);
});
$orders = $query->where("orders.user_id", 1)
->get();
dd($orders);
但最好使用whereExist
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.