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

Laravel 8 向数组类型字段追加值时覆盖原有内容问题求解

问题原因

你当前的控制器逻辑每次新增申请人时,没有读取数据库中已存储的申请人数组,而是直接创建了仅包含当前提交user_id的新数组,直接赋值覆盖了旧数据,因此最终数组始终只有一个值。你之前尝试array_push没有生效,也是因为没有先读取已存储的applicants数组,直接往新创建的空数组里push元素,最终还是会覆盖原有数据。

修正后的控制器代码

public function addApplicant($id, Request $reqst){
    $job = Recruitment::findOrFail($id);
    // 读取已有申请人数组,字段为空时初始化空数组
    $applicants = $job->applicants ?? [];
    // 将新的用户ID加入数组
    $applicants[] = $reqst->user_id;
    // 赋值后保存
    $job->applicants = $applicants;
    $job->save();

    return redirect()->back();
}

你的applicants字段已经在模型中配置了array类型转换,Laravel会自动处理text存储字段和PHP数组的序列化/反序列化,不需要额外手动处理编码解码操作。

可选优化方案

可以增加重复申请校验,避免同一个用户ID多次存入同一个岗位的申请人数组:

public function addApplicant($id, Request $reqst){
    $job = Recruitment::findOrFail($id);
    $applicants = $job->applicants ?? [];
    $userId = $reqst->user_id;
    // 校验用户是否已经申请过
    if (!in_array($userId, $applicants)) {
        $applicants[] = $userId;
        $job->applicants = $applicants;
        $job->save();
    }
    return redirect()->back();
}

这里用findOrFail替代原有的find,可以在传入的岗位ID不存在时直接返回404,避免后续调用属性时报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:06:03