假设我们有一个agents表,该表具有一quota列,并且与表具有多对多关系tickets。使用Laravel Eloquent ORM,如何仅选择“票证”数量少于或等于“配额”的代理?
必须避免装载过多的物品。
class Agent extends Model {
public function tickets()
{
return $this->belongsToMany(Ticket::class, 'agent_tickets')->using(AgentTicket::class);
}
public function scopeQuotaReached($query)
{
// Does not work. withCount is an aggregate.
return $query->withCount('tickets')->where('tickets_count', '<=', 'quota');
// Does not work. Tries to compare against the string "quota".
return $query->has('tickets', '<=', 'quota');
}
}
与使用DB::raw()带有手动加入,分组和计数的查询相比,有没有一种更雄辩的(双关语意)方法来解决此问题?
编辑
作品:
$query->withCount('tickets')->having('tickets_count', '<=', DB::raw('quota'))->get();
作品:
$query->withCount('tickets')->having('tickets_count', '<=', DB::raw('quota'))->exists();
休息时间:(投掷)
$query->withCount('tickets')->having('tickets_count', '<=', DB::raw('quota'))->count();
MMTTMM
PIPIONE