我想要插入多个复选框值和多个邮箱,我正在用Foreach循环来做这件事.一切正常,但当1封邮箱为空时.它在邮箱字段中插入NULL,并且NULL复选框也插入完整数据.

这是我的表格,有20个输入

 <form method="POST" action="{{route('send.document')}}">
    @csrf 
   // 1st Email
    <input type="email"  name="email[]">
    <input type="checkbox" name="task[]" value="sign">
    <input type="checkbox" name="task[]" value="initial">
    <input type="checkbox" name="task[]" value="date">
    <input type="checkbox"name="task[]"  value="cc">
    // 2nd Email
    <input type="email" name="email[]" >
    <input type="checkbox"name="task[]" value="sign">
    <input type="checkbox" name="task[]" value="initial">
    <input type="checkbox" name="task[]"value="date">
    <input type="checkbox" name="task[]" value="cc">
    // 3rd Email
    <input type="email" name="email[]">
    <input type="checkbox" name="task[]" value="sign">
    <input type="checkbox" name="task[]" value="initial">
    <input type="checkbox" name="task[]" value="date">
    <input type="checkbox" name="task[]" value="cc">
    // 4th Email
    <input type="email" name="email[]" >
    <input type="checkbox" name="task[]" value="sign">
    <input type="checkbox" name="task[]" value="initial">
    <input type="checkbox" name="task[]" value="date">
    <input type="checkbox" name="task[]" value="cc">
    <button type="submit">Send</button>
    </form>

这是我的路由

 Route::post('/send-document',[SendDocumentController::class, 'sendDocToUser'])- 
    >name('send.document');

我的控制器

public function sendDocToUser(Request $request)
        {
            $UpdateFile = FileStorage::where('id', $request->id)->first();
            if (!empty($request->email)) {
                foreach($request->email as $mail) {
                    $save = new SendFile([
                        'Email' => $mail,
                        'senderId' => Auth::id(),
                        'fileName'=> $UpdateFile->uniqueFileName,
                        'task' => $request->task,
                    ]);
                    $save->save();
                }
            }
    }

数据库插入的数据:

database look like this

and the form look like: it is my form picture

推荐答案

我会稍微调整你的<form>,在task[] checkboxE上加入key,并利用循环.

<form method="POST" action="{{ route('fake.store') }}">
    @csrf()

    @for ($i = 0; $i < 3; $i++)
        <input type="email" name="email[]" />
        <input type="checkbox" name="task[{{$i}}][]" value="sign" />
        <input type="checkbox" name="task[{{$i}}][]" value="initial" />
        <input type="checkbox" name="task[{{$i}}][]" value="cc" />
        <input type="checkbox" name="task[{{$i}}][]" value="date" />
    @endfor
    <button>Submit</button>
</form>

如果您希望将$i的上限作为Controller函数的参数传递到视图中(请参阅末尾的沙箱),则可以这样做.

这将提交您的taskcheckboxE作为array,但带有索引$i,我们将使用该索引作为挂钩,以根据具有相应索引的email[]字段是否为null来删除.

public function store(Request $request)
{
    $notNullEmails = array_filter($request->email);

    $merged = [];
    foreach ($notNullEmails as $key => $value) {
        $merged[] = ['email' => $notNullEmails[$key], 'task' => $request->task[$key]];
    }

    dump($merged);
}

上述情况的结果是:

array:2 [▼
  0 => array:2 [▼
    "email" => "email@domain.com"
    "task" => array:2 [▼
      0 => "initial"
      1 => "cc"
    ]
  ]
  1 => array:2 [▼
    "email" => "email@domain.com"
    "task" => array:2 [▼
      0 => "sign"
      1 => "date"
    ]
  ]
]

下面是一个关于PHPSandbox.io的功能示例.

Laravel相关问答推荐

laravel如何在Blade 模板中将元素添加到数组

未定义防护 [api] 的授权驱动程序 [api]

前端和管理员分开时未加载laravel 9中间件

为什么 laravel 模型会重复一组数据以及如何(如果可能)只有一组数据?

laravel url 验证变音符号

如何修复无效请求(不支持的 SSL 请求)

Laravel 路由将变量传递给控制器

如何使用 Laravel 模型访问数据库视图?

如何在同一行显示 Laravel artisan 命令输出?

错误:您的要求无法解析为一组可安装的软件包.

Laravel 5.4 - 注册后禁用自动登录

Eloquent 的 Model::query() 是什么意思?

laravel 4 - 如何限制(采取和跳过)Eloquent的 ORM?

Laravel 同步错误

加载模型的所有关系

Laravel:命令未找到

命令未定义异常

WhereHas Laravel 中的关系计数条件是什么

count() 参数必须是数组或在 laravel 中实现可数的对象

Laravel - Union + 分页?