如何使用计数在哪里有条件由拉威尔雄辩

pkmbmrz7  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(244)

我有两张table:

客户表=

身份证件,
分数,
总购买量,
(此表有许多事务)

还有一个事务表

客户id,
价值观,
分数,
创建时间:,
(这张table对着一位顾客)
我想搜索客户有5个交易,其中一个在2017年1月1日创建的日期和客户得分和价值超过200,并采取10行随机顺序(这是一个彩票系统)我尝试这个代码之前问

customer::
      whereHas('transactions', function ($query) use ($last_transaction)
      {
        $query->whereDate('created_at',$last_transaction);
      })
      ->where('total_buy', '>=',$r->minvalue)
      ->where('score', '>=',$r->score)
      ->inRandomOrder()
      ->take($r->customernumber)
      ->get();

但我不知道如何计算行子关系在哪里有

qhhrdooz

qhhrdooz1#

使用 havingRaw() .

customer::
  whereHas('transactions', function ($query) use ($last_transaction)
  {
    $query->havingRaw('COUNT(*) > 4');
  })->
  whereHas('transactions', function ($query) use ($last_transaction)
  {
    $query->whereDate('created_at',$last_transaction);
  })
  ->where('total_buy', '>=',$r->minvalue)
  ->where('score', '>=',$r->score)
  ->inRandomOrder()
  ->take($r->customernumber)
  ->get();

这将检查至少5个 transactions . 如果你需要的话 exact 5,然后使用 equal 接线员。

stszievb

stszievb2#

您可以将额外的参数传递给 whereHas .

customer::query()
  ->whereHas('transactions', function ($query) use ($last_transaction)
    {
      $query->whereDate('created_at',$last_transaction);
    }, '=', 5)
  ->where('total_buy', '>=',$r->minvalue)
  ->where('score', '>=',$r->score)
  ->inRandomOrder()
  ->take($r->customernumber)
  ->get();

相关问题