如何在Laravel Eloquent中将相关计数与自己的列进行比较?

时间:2019-04-13 22:25:39

标签: php mysql laravel eloquent

假设我们有一个 const { router, postsBySubreddit } = state; const selectedSubreddit = router.location.pathname.substr(1) || 'reactjs'; 表,其中包含一个agents列,并且与quota有多对多关系。使用Laravel Eloquent ORM,我如何只选择“票证”数量少于或等于“配额”的代理?

必须避免过度加载对象。

tickets

与使用手动连接,分组和计数的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();

相关

https://github.com/laravel/framework/issues/14492
问题已经关闭,到#9307的链接,我已经发布在这里。将跟进。

2 个答案:

答案 0 :(得分:1)

tickets_count这样的派生列只能在HAVING子句中访问。

由于没有havingColumn()方法,因此必须使用原始表达式:

$query->withCount('tickets')->having('tickets_count', '<=', DB::raw('quota'));

答案 1 :(得分:0)

在数据库级别,我不知道如何实现此目的,但是您可以在集合级别上做到这一点。

onPress={this.navigateToScr}

您当然可以内联它:

onPress={() => this.navigateToScr()}