国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關(guān)于laravelDb的whereHas的疑問

chuxinone

問題描述

Laravel 的關(guān)聯(lián)關(guān)系查詢 whereHas 在日常開發(fā)中給我們帶來了極大的便利,但是在主表數(shù)據(jù)量比較多的時候會有比較嚴(yán)重的性能問題,主要是因為 whereHas 用了 where exists (select * ...),之前使用laravel的時候會使用https://learnku.com/articles/68975 這個包來進(jìn)行改善,但是在webman中我使用了這個包后出現(xiàn)了不適配的情況,比如最終的sql語句中的in等條件會被當(dāng)成where字符串條件等錯誤,不知在webman中是否有whereHas的改善包或方案

1254 2 0
2個回答

meows

怎么可能會有,你那個本身就是人家擴(kuò)展的,你自己修改下吧

  • 暫無評論
caylof

首先,exist 和 in 的執(zhí)行效率比較沒有定性的結(jié)果,具體情況需要 explain 下。

如果非要用 in 來替換 exist 語句,自己可以完全用 Eloquent 重組構(gòu)建想要的 sql,簡單舉例下:

表 user 與 card 是一對多的關(guān)系

$sql1 = User::query()->whereHas('card')->toSql();

$sql2 = User::query()->whereIn('id', Card::query()
    ->select('user_id')
    ->whereColumn('user.id', 'card.user_id')
)->toSql();
  • chuxinone 2023-11-10

    這種方式我還沒嘗試,請問下大佬,user和card以及group三個表分別都是1對1的關(guān)系,現(xiàn)在我通過user入口表來進(jìn)行關(guān)聯(lián)查詢,最終結(jié)果只想返回3個表都有匹配結(jié)果的數(shù)據(jù),如果某一個表沒有找到匹配的數(shù)據(jù)則該條數(shù)據(jù)不返回,我目前是通過join來進(jìn)行查詢的,按照你這種方法是否適用我上列情況

  • caylof 2023-11-13

    適用的,可以構(gòu)建你想要的任意 sql

年代過于久遠(yuǎn),無法發(fā)表回答
??