繁体   English   中英

使用数组过滤记录 - Laravel

[英]Filter record by using array - Laravel

我有一个集合,我想使用数组根据“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);

任何帮助将是非常可观的。

考虑下面你的阵列:

$days = [2,4,6,8];

创建如下原始查询(注意:您也可以在查询中编写此行)

$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');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM