如何在Laravel中创建查询到db?

时间:2018-06-13 11:20:47

标签: sql laravel laravel-query-builder

我希望通过此SQL查询在Laravel中创建查询:

SELECT * FROM kreditanfragen WHERE
send_bank='0'
AND (((beruf=6 || beruf=14 || beruf=29 || beruf=30 || beruf=31) AND netto>601) OR ((beruf1=6 || beruf1=14 || beruf1=29 || beruf1=30 || beruf1=31) AND netto1>601))
AND status_intern!=31
AND land='DE'

3 个答案:

答案 0 :(得分:0)

我猜您可以将查询简化为

SELECT * 
FROM kreditanfragen 
WHERE send_bank='0'
AND (
    beruf in(6,14,29,30,31) AND netto>601)
    OR
    beruf1 in(6,14,29,30,31) AND netto1>601)
)
AND status_intern != 31
AND land='DE'

在查询构建器中,您可以使用parameter grouping来处理or案例

DB::table('kreditanfragen')
            ->where('send_bank', '=', 0)
            ->where('status_intern', '<>', 3)
            ->where('land', '=', 'DE')
            ->whereIn('beruf', [6,14,29,30,31])
            ->where(function ($query) {
                $query->where(function ($query) {
                    $query->whereIn('beruf', [6,14,29,30,31])
                          ->where('netto', '>', 601);
                })->orWhere(function ($query) {
                    $query->whereIn('beruf1', [6,14,29,30,31])
                          ->where('netto1', '>', 601);
                });
            })
            ->get();

答案 1 :(得分:0)

您的查询100%相同,但不是很好。

DB::table('kreditanfragen')
    ->where('send_bank', 0)
    ->where(
        function ($query) use ($berufs) {
            $query->where(function ($query) use ($berufs) {
                $query
                    ->whereIn('beruf', $berufs)
                    ->orWhere('netto', '>', 601);
            })->orWhere(function ($query) use ($berufs) {
                $query
                    ->whereIn('beruf', $berufs)
                    ->orWhere('netto1', '>', 601);
            });
        }
    )->where('status_intern', '!=', 31)
    ->where('land', 'DE')
    ->get();

结果是

"select * from `kreditanfragen` where `send_bank` = ? and ((`beruf` in (?, ?, ?, ?, ?) or `netto` > ?) or (`beruf` in (?, ?, ?, ?, ?) or `netto1` > ?)) and `status_intern` != ? and `land` = ?"

正确的方法做同样的查询

DB::table('kreditanfragen')
    ->where('send_bank', 0)
    ->where(
        function ($query) use ($berufs) {
            $query
                ->whereIn('beruf', $berufs)
                ->where(function ($query) {
                    $query
                        ->where('netto', '>', 601)
                        ->orWhere('netto1', '>', 601);
             });
    })->where('status_intern', '!=', 31)
    ->where('land', 'DE')
    ->get();

结果是

"select * from `kreditanfragen` where `send_bank` = ? and (`beruf` in (?, ?, ?, ?, ?) and (`netto` > ? or `netto1` > ?)) and `status_intern` != ? and `land` = ?"

答案 2 :(得分:0)

每当我发现自己面临复杂的查询时,我总是使用DB :: select()方法,如下所示:

DB::select("SELECT * FROM kreditanfragen WHERE
send_bank='0'
AND (((beruf=6 || beruf=14 || beruf=29 || beruf=30 || beruf=31) AND netto>601) 
OR ((beruf1=6 || beruf1=14 || beruf1=29 || beruf1=30 || beruf1=31) AND netto1>601))
AND status_intern!=31
AND land='DE'");