You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel控制器创建优先级客户数组并传递至外部findActive函数

如何在Laravel控制器中创建优先级客户数组并用于SQL NOT IN查询?

咱们先理清楚你的核心需求:你已经有一段能把符合条件的客户标记为priority状态的运行代码,现在需要把这些优先级客户的编号收集成数组,传给activeCust.php里的findActive函数,最终实现「查询不在优先级列表里的客户」的SQL逻辑。下面一步步来实现:

第一步:在控制器中收集优先级客户编号数组

你只需要在现有代码块的基础上,先初始化一个空数组,每当标记客户为priority时,就把它的custNum添加进去。修改后的控制器代码如下:

// 初始化空数组存储优先级客户编号
$priorityCustNums = [];

$now = Carbon::now();
$deadline = Carbon::now()->subMonths(2);

// 假设$yourQueryResults是你原有的查询结果集合
foreach ($yourQueryResults as $d) {
    $d->createdAt = new \DateTime($d->created_at);
    if ($d->nextDate <= $now && $d->createdAt > $deadline && $d->status != 'exempt') {
        $d->status = 'priority';
        // 将符合条件的客户编号加入数组
        $priorityCustNums[] = $d->custNum;
    }
}

第二步:处理数组并安全传递给findActive函数

直接把数组拼进SQL会有SQL注入风险,而且空数组会导致NOT IN语法异常,所以咱们先做处理:

// 处理空数组:如果没有优先级客户,给一个不会匹配任何值的默认值(比如0)
$custNumParam = empty($priorityCustNums) ? '0' : implode(',', array_map(function($num) {
    // 对编号做转义,防止SQL注入
    return is_numeric($num) ? (int)$num : DB::connection()->getPdo()->quote($num);
}, $priorityCustNums));

// 实例化类并调用函数
$activeCust = new activeCust();
$nonPriorityCustomers = $activeCust->findActive($custNumParam);

第三步:优化activeCust.php中的findActive函数

原来的函数没有处理参数安全和空数组场景,咱们调整一下:

public function findActive($custNumParam){
    // 确保SQL语法正确,同时避免注入风险
    $sql = "SELECT c.customer FROM customers c WHERE c.customer NOT IN ($custNumParam)";
    
    // 执行查询并返回结果(根据你项目的数据库操作方式调整,比如用DB门面或PDO)
    return DB::select($sql);
}

额外提示:更Laravel化的优雅写法

如果你的项目是Laravel,推荐用Eloquent查询构造器,完全避免手动拼接SQL,安全又简洁:

修改activeCust.php的函数:

use Illuminate\Support\Facades\DB;

public function findActive(array $priorityCustNums){
    return DB::table('customers')
        ->whereNotIn('customer', $priorityCustNums)
        ->select('customer')
        ->get();
}

对应的控制器调用更简单:

// 直接传递数组,Laravel自动处理转义和空数组
$activeCust = new activeCust();
$nonPriorityCustomers = $activeCust->findActive($priorityCustNums);

当数组为空时,whereNotIn会自动被忽略,返回所有客户,这更符合业务预期。

内容的提问来源于stack exchange,提问作者Geoff_S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:30:47