Laravel 7 - 如何将多个数据插入 mysql 数据库

Laravel 7 - How to insert multiple data to mysql database

我正在尝试将数据插入数据库。但我不知道如何将多个 select 复选框数据插入 mysql 数据库。


    public function create(Request $request)
        {
            try { 
                
                $id_student = $request->get('id_student');
                   
                $consecutive = DB::select('SELECT SUM(idRecord) FROM record GROUP BY idRecord');
                $final_consecutive = sprintf("%04d", $consecutive); 
        
                foreach($request->select as $data)
                {
                    Records::create($data);
                }
    
                return back()->with('success', 'Constancia creada correctamente');
        
            } catch (\Illuminate\Database\QueryException $e) {
                $message = $e->getMessage();
                if (strpos($message, "Duplicate entry")) {
                    return back()->with('err', 'Esta constancia ya ha sido creada');
                }
                if (strpos($message, "1366 Incorrect integer value: '' for column 'idGrupo'")) {
                    return back()->with('err', 'Debe seleccionar un grupo para poder continuar');
                }
                return back()->with('err', $message);
            }
        }


    @foreach ($group->students as $student)
        <tr>
           <td class="align-middle text-center">
               <input class="form-control" type="text" name="nombre" value="{{$student->lastName}} {{$student->Names}}" disabled>
            </td>
    
            <td class="align-middle text-center">
                 <input class="form-control form-control-sm" type="text" name="grade" value="{{isset($student->pivot->grade)?$student->pivot->grade:''}}" placeholder="grade" disabled>
             </td>
    
    
            <form action="{{url('/Create/Records')}}" method="POST">
                <input class="form-control form-control-sm" type="hidden" name="id_student" value="{{$student->id_student}}" >
                    <td class="align-middle text-center">
                        <input id="select" type="checkbox" name="select[]">
                    </td>
        </tr>
    @endforeach
    </tbody>
    </table>
        <div class="d-flex justify-content-center">
            <button type="submit" class="btn btn-sm btn-outline-success">Save</button>
        </div>

我尝试做的是使用 select 复选框,然后在控制器中我将其作为数组传递到 foreach 循环中,但老实说,我认为我离弄清楚它还差得很远。 .除此之外,连续的是自动生成的,我也不知道如何将它传递给数组。

顺便说一句,我得到这个错误:

Argument 1 passed to Illuminate\Database\Eloquent\Builder::create() must be of the type array, string given

Create() 以数组为参数。 当您的 foreach 循环将 $data 值 0 或 1 作为字符串执行时,就会给出错误原因。

如果你想在 foreach 循环中创建那么

foreach($request->select as $data)
{
    Records::create(['field_name' => $data]);
}

默认情况下,多个 select 复选框将被转换为名称以 [] 结尾的关联数组作为其键,例如您的使用,因此您可以像这样访问它:

$select = $_POST['select'];

然后你可以遍历这些值,这是一个简单的 php 建议使用 laravel 方法,因为它提供更像安全和过滤,这是一个简单快速的解决方案。但是,如果您使用 ajax 提交,则应始终确保参数始终以 [] 结尾,例如您有一个获取请求,但相同的语法仍然适用于 post 方法:

http://localhost?select[]=1&select[]=2

相同的代码将像顶部一样工作,但对于这样的获取请求,您将使用:

$select = $_GET['select'];

还没有在 laravel 请求对象上尝试过,但我认为当您使用 Request 实例时也会进行相同的转换,您也可以尝试这样做,只需确保参数名称始终以 [] 结尾即可但是如果所有复选框的名称都设置为 select 它将只是 return 一个错误表示的字符串。

您应该像这样将数据传递给您的模型:

Records::create(['id_student' => $idStudent, 'consecutive' => $consecutive]);

目前,您正在捐赠:

Records::create('string');

这不是传递数据的正确方法。这就是出现错误的原因。