将复杂的 whereIn 与 Laravel 的查询构建器一起使用
Use a complex whereIn with Laravel's query builder
我们有一个 SQL 查询,它自己可以正常工作。
SELECT id FROM `tblinvoices` WHERE `id` IN (
SELECT invoiceid FROM `tblinvoiceitems` WHERE `type` = 'Addon' AND `relid` = 1479 AND `userid` = 9554
) AND `userid` = 9554 AND `status` = 'Unpaid'
我已尝试深入挖掘并找到一种适用于这些子选择的良好查询生成器格式,但不断得到意想不到的结果。这是我构建的:
$db = Capsule::table('tblinvoices')->select('id')->where('userid', 9554)->where('status', 'Unpaid')->whereIn('id', function($query)
{
$query->select('invoiceid')->from('tblinvoiceitems')->where('type', 'Addon')->where('relid', 1479)->where('userid', 9554);
});
我似乎误解了 laravel 的查询是如何工作的。
我很傻,我忘记了查询末尾的 get();
:
$db = Capsule::table('tblinvoices')->select('id')->where('userid', 9554)->where('status', 'Unpaid')->whereIn('id', function($query)
{
$query->select('invoiceid')->from('tblinvoiceitems')->where('type', 'Addon')->where('relid', 1479)->where('userid', 9554);
})->get();
我们有一个 SQL 查询,它自己可以正常工作。
SELECT id FROM `tblinvoices` WHERE `id` IN (
SELECT invoiceid FROM `tblinvoiceitems` WHERE `type` = 'Addon' AND `relid` = 1479 AND `userid` = 9554
) AND `userid` = 9554 AND `status` = 'Unpaid'
我已尝试深入挖掘并找到一种适用于这些子选择的良好查询生成器格式,但不断得到意想不到的结果。这是我构建的:
$db = Capsule::table('tblinvoices')->select('id')->where('userid', 9554)->where('status', 'Unpaid')->whereIn('id', function($query)
{
$query->select('invoiceid')->from('tblinvoiceitems')->where('type', 'Addon')->where('relid', 1479)->where('userid', 9554);
});
我似乎误解了 laravel 的查询是如何工作的。
我很傻,我忘记了查询末尾的 get();
:
$db = Capsule::table('tblinvoices')->select('id')->where('userid', 9554)->where('status', 'Unpaid')->whereIn('id', function($query)
{
$query->select('invoiceid')->from('tblinvoiceitems')->where('type', 'Addon')->where('relid', 1479)->where('userid', 9554);
})->get();