我希望通过此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'
答案 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'");