我有一个集合,我想使用一个数组根据"days_since_last_wallet_transaction“过滤这个集合。例如,我有一个数组$day = array(2,4,6,8)。现在我想得到days_since_last_wallet_transaction在2,4,6,8中的位置记录。我想我不能在where子句中使用"days_since_last_wallet_transaction“。下面是我的问题:
Customer::select(
'customers.id',
'customers.wallet_amount',
'customers.onesignal_id',
'customers.phone_number',
'customers.name',
DB::raw('DATEDIFF(NOW(), max(wallet_transactions.created_at)) as days_since_last_wallet_transaction')
)
->join('wallet_transactions', function ($join){
$join->on('customers.id', '=', 'wallet_transactions.customer_id')
->where('wallet_transactions.amount', '>', 0);
})
->groupBy('customers.id')
->where('customers.wallet_amount', '>', 0);任何帮助都将是非常感谢的。
发布于 2019-12-25 15:16:21
考虑下面的数组:
$days = [2,4,6,8];创建一个原始查询,如下所示(注意:您也可以在query中编写此行)
$raw_query = '(DATEDIFF(NOW(), max(wallet_transactions.created_at))) IN ('.implode(',',$days).')';您的查询
Customer::select(
'customers.id',
'customers.wallet_amount',
'customers.onesignal_id',
'customers.phone_number',
'customers.name',
DB::raw('DATEDIFF(NOW(), max(wallet_transactions.created_at)) as days_since_last_wallet_transaction')
)
->join('wallet_transactions', function ($join){
$join->on('customers.id', '=', 'wallet_transactions.customer_id')
->where('wallet_transactions.amount', '>', 0);
})
->where('customers.wallet_amount', '>', 0)
->havingRaw($raw_query)
->groupBy('customers.id');https://stackoverflow.com/questions/59475982
复制相似问题