我有一个模型Partner_deal,它有很多字段,但是您真正需要知道的唯一一个是quantity,它是一个整数,它指定交易可以赎回多少次。
然后,我有另一个模型Partner_deal_redemption,以跟踪赎回。它有一个partner_deal_id列和一个user_id列来记录哪些用户已经赎回了哪笔交易。
我想在我的Partner_deal模型中创建一个范围,以便它只返回赎回次数小于数量字段的交易。
我知道如何在MySql中执行子查询来计算每笔交易的赎回次数,并使用where子句筛选出赎回次数=数量的子查询。
我不知道从何说起雄辩,这是我最好的尝试:
function scopeNotRunOut($query)
{
return $query->having('quantity', '>', function($q)
{
$q->from('partner_deal_redemptions')
->selectRaw('count(*)')
->where('partner_deal_id', '=', 'id');
});
}发布于 2015-05-26 16:19:17
您可能可以使用雄辩的has()函数:
http://laravel.com/docs/5.0/eloquent#querying-relations
function scopeNotRunOut($query)
{
return $query->has('redemptions', '<', DB::raw('quantity'));
}要使用这个函数,您需要在您的redemptions模型中定义Partner_deal函数,它将表示Partner_deal和Partner_deal_redemption模型之间的关系。
发布于 2015-05-27 08:36:11
MrShibby是正确的,但后来我意识到我需要检查quantity是否为null,所以我将他的解决方案稍微修改了如下:
function scopeNotRunOut($query)
{
return $query->where(function($q) {
$q->orHas('redemptions', '<', DB::raw('quantity'))
->orWhere('quantity', '=', null);
});
}https://stackoverflow.com/questions/30463339
复制相似问题