我有两张桌子:
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子关系在哪里
答案 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();