如何使用计数在哪里有条件由laravel雄辩

时间:2018-01-17 08:28:54

标签: php mysql laravel eloquent

我有两张桌子:

customer table =

  


ID,       
得分,       
total_buy,       
(这张表有很多交易)

还有一个交易表

  


CUSTOMER_ID,       
值,       
得分,       
created_at,       
(这张桌子给客户看来)

我希望搜索客户,其中有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();

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

2 个答案:

答案 0 :(得分:2)

使用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运算符。

答案 1 :(得分:0)

您可以将其他参数传递给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();