相当于 Laravel 查询生成器中的 FORCE INDEX FOR JOIN

问题描述 投票:0回答:2

我正在构建一个 Laravel 5.2 应用程序。我有一个本机 SQL 查询,需要转换为查询构建器形式,我的意思是,相当于 Laravel 查询构建器中的 SQL 查询。基本上,当我尝试翻译 FORCE INDEX FOR JOIN 命令时遇到问题,这是本机 SQL 查询:

SELECT some columns...
    FROM table1 AS t1 
        LEFT JOIN table2 AS t2 
        FORCE INDEX FOR JOIN (idx_table2) 
            ON ((t1.messageid = t2.messageid) AND (t2.othercolumn = 1))  
        WHERE something... 

所以,现在我已经:

$query= DB::table('table1 as t1')
                        ->leftJoin('table2 as t2', 't1.messageid', '=', 't2.messageid')

那么,我该如何添加这一行

FORCE INDEX FOR JOIN (idx_table2)

php sql laravel-5 laravel-query-builder
2个回答
3
投票

您可以使用以下语法:

$query= DB::table('table1 as t1')
                    ->leftJoin(DB::raw('table2 AS t2 FORCE INDEX FOR JOIN (idx_table2)'), 't1.messageid', '=', 't2.messageid')

0
投票

在 Laravel 9 及更高版本中,您可以使用 forceIndex() 函数,例如:

$users = DB::table('users')
            ->select('name', 'email as user_email')
            ->forceIndex('index_name')
            ->get();

这没有记录在文档中,但可以在这里找到: https://laravel.com/api/9.x/Illuminate/Database/Query/Builder.html#method_forceIndex

© www.soinside.com 2019 - 2024. All rights reserved.