亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel Eloquent WHERE field=(...) 子查詢

Laravel Eloquent WHERE field=(...) 子查詢

PHP
白豬掌柜的 2022-11-04 17:28:49
我有三個表:(用戶和單詞列表之間的多對多關系,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();


查看完整回答
反對 回復 2022-11-04
  • 1 回答
  • 0 關注
  • 161 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號