我有三個表:(用戶和單詞列表之間的多對多關系,userlistrels 是連接器)users:idnamewordlists:idnamecreator_iduserlistrels:iduser_idwordlist_id我想執行以下查詢:SELECT * FROM users WHERE id=( SELECT wordlists.creator_id FROM userlistrels JOIN wordlists ON wordlists.id=userlistrels.wordlist_id WHERE userlistrels.user_id=$curr_user )如何WHERE foo= ( subquery )在 Laravel 接口中編寫這種類型的子查詢()?文檔涵蓋SELECT * FROM (subquery) WHERE contition,SELECT * FROM table WHERE (subquery LIMIT 1) = 'foo',但不包括SELECT * FROM table WHERE field=(subquery)我嘗試了很多方法,這是唯一不拋出異常的方法,但是它不起作用:$curr_user = // id of my user$users = User::where('id', function($query) use($curr_user){ $query->select('wordlists.creator_id') ->from('userlistrels') ->join('wordlists', 'wordlists.id', '=', 'userlistrels.wordlist_id') ->where('userlistrels.user_id', $curr_user); })->get();誰能告訴我這段代碼有什么問題,或者如何制作這種類型的子查詢?編輯:我的 SQL 查詢是錯誤的。我試圖做的正確查詢是: SELECT * FROM users JOIN (SELECT wordlists.creator_id FROM userlistrels JOIN wordlists ON wordlists.id=userlistrels.wordlist_id WHERE userlistrels.user_id=$curr_user) AS nn ON users.id=nn.creator_id;并正確的 laravel 代碼:$users_sub = DB::table('userlistrels')->join('wordlists', 'wordlists.id', '=', 'userlistrels.wordlist_id')->where('userlistrels.user_id', $curr_user)->select('wordlists.creator_id'); $users = DB::table('users') ->joinSub($users_sub, 'tt', function ($join) { $join->on('users.id', '=', 'tt.creator_id'); })->get();
1 回答

富國滬深
TA貢獻1790條經驗 獲得超9個贊
我認為問題來自您的子查詢。該子查詢將返回多個creator_id
取決于您的數據庫,因此有兩種解決方案。
解決方案1:
使用whereIn
代替where
:
User::whereIn('id', function($query) use($curr_user){ $query->select('wordlists.creator_id') ->from('userlistrels') ->join('wordlists', 'wordlists.id', '=', 'userlistrels.wordlist_id') ->where('userlistrels.user_id', $curr_user); })->get();
解決方案2:
limit(1)
后追加where('userlistrels.user_id', $curr_user)
:
User::whereIn('id', function($query) use($curr_user){ $query->select('wordlists.creator_id') ->from('userlistrels') ->join('wordlists', 'wordlists.id', '=', 'userlistrels.wordlist_id') ->where('userlistrels.user_id', $curr_user) ->limit(1); })->get();
- 1 回答
- 0 關注
- 161 瀏覽
添加回答
舉報
0/150
提交
取消