簡體   English   中英

Laravel 7 - 如何向mysql數據庫插入多條數據

[英]Laravel 7 - How to insert multiple data to mysql database

我正在嘗試將數據插入數據庫。 但我不知道如何將多個 select 復選框數據插入 mysql 數據庫。

  • Controller

    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 復選框,然后在 Controller 中我將它作為數組傳遞到 foreach 循環中,但老實說我認為我離弄清楚它還差得很遠......除此之外,連續的是自動生成的而且我也不知道如何將它傳遞給數組。

順便說一句,我得到這個錯誤:

傳遞給 Illuminate\Database\Eloquent\Builder::create() 的參數 1 必須是數組類型,字符串給定

記錄

您應該將數據傳遞給您的 Model,例如:

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

目前,您正在提供:

Records::create('string');

這不是傳遞數據的正確方法。 這就是為什么會出現錯誤。

Create() 以數組為參數。 當您的 foreach 循環將 $data 值 0 或 1 作為字符串執行時,就會給出錯誤原因。

如果你想在 foreach 循環中創建那么

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

默認情況下,多個 select 復選框將轉換為名稱以 [] 結尾的 assoc 數組作為其鍵,例如您的使用,因此您可以像這樣訪問它:

$select = $_POST['select'];

然后你可以遍歷值這是一個普通的 php 建議使用 laravel 方法,因為它提供更像安全和過濾器,這是一個簡單快速的解決方案。 但是,如果您使用 ajax 提交,則應始終確保參數始終以 [] 結尾,例如您有一個 get 請求,但相同的語法仍然適用於 post 方法:

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

相同的代碼將在頂部工作,但對於這樣的獲取請求,您將使用:

$select = $_GET['select'];

還沒有嘗試過 laravel 請求 object 但我認為當您使用 Request 實例時正在完成相同的轉換,您也可以嘗試這樣做,只需確保您始終以 [] 結束參數名稱但如果所有復選框的名稱是設置為 select 它將只返回錯誤意味着的單個字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM