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

标签 php mysql laravel eloquent

假设我们有一个 agents带有 quota 的 table 列和与 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();

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

相关

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

最佳答案

tickets_count 等派生列只能在 HAVING 子句中访问。

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

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

关于php - 如何在 Laravel Eloquent 中将相关计数与自己的列进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55670383/

相关文章:

php - WordPress:<主体类 ="customize-support">

来自 xampp 的 Phpinfo() 不显示 php-redis 扩展 (UBUNTU 20.04)

jquery - 如何更改搜索结果在下拉列表中的显示顺序

Mysql sum 与 group_concat 和连接表

php - 在 Laravel 中对严格错误禁用 exit()

javascript - 使用ajax调用更新数据库onclick

按字符串搜索 PHP MySQL 表 - 使用散列?

mysql - SQL 连接两列,第一列有变化

Laravel - Controller 可以判断请求是来自网络还是 api 路由?

php - 有一个可捕获的 fatal error