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');
这不是传递数据的正确方法。这就是出现错误的原因。
我正在尝试将数据插入数据库。但我不知道如何将多个 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');
这不是传递数据的正确方法。这就是出现错误的原因。