如何在 Laravel 中创建对 db 的查询?
Posted
技术标签:
【中文标题】如何在 Laravel 中创建对 db 的查询?【英文标题】:How to create query in Laravel to db? 【发布时间】:2018-11-22 23:02:02 【问题描述】:我希望通过这个 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'
【问题讨论】:
那么,你试过吗?你现在有什么代码?你应该看看laravel queries docs 【参考方案1】:我想您可以将查询简化为
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();
【讨论】:
@user9660776 这是一个缺少的分号,我已经更新了你现在可以查看的答案【参考方案2】:您的查询 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` = ?"
【讨论】:
在orWhere
部分你需要beruf1
和netto1
@MKhalidJunaid 看到最终更正的答案(第二部分)
谢谢,但是请解释一下为什么你输入 orWhere('land','de'),而在原来的时候只是 'and'
错了,我会修复它【参考方案3】:
每当我发现自己面临复杂的查询时,我总是使用 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'");
【讨论】:
以上是关于如何在 Laravel 中创建对 db 的查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ActiveRecords 中创建对 Ruby 中对象的引用?