Heim > Fragen und Antworten > Hauptteil
Ich bin neu bei Laravel, Ich möchte Schülerdaten aus der XLSX-Datei in die MySQL-Datenbank einfügen. Ich verwende Laravel Excel v3, um Excel-Dateien zu importieren. Es funktioniert gut. Abgesehen vom Einfügen von Studentendetails in eine Tabelle sollte jedoch in allen zugehörigen Tabellen derselbe Studenten-ID-Datensatz erstellt werden.
Beispiel--> Wenn Sie 1 Schüler in die Tabelle „student_details“ einfügen, müssen Sie 1 Datensatz in den Tabellen „oral“ und „endsem“ mit dem Fremdschlüssel „student_id“ erstellen.
Ich habe Aktivitäten durchgeführt, um diese im verbalen Blatt und im Abschlussblatt festzuhalten. Nun stellt sich die Frage, wie man das Event anwendet und wie man den Studentenausweis erhält, nachdem man den Studenten angelegt hat, um das Event auszulösen. (Die Studenten-ID ist der auto_increment-Wert)
StudentImport -->
<?php namespace App\Imports; use App\Events\StudentCreated; use Illuminate\Support\Collection; use Maatwebsite\Excel\Concerns\ToModel; use Maatwebsite\Excel\Validators\Failure; use Maatwebsite\Excel\Concerns\Importable; use Maatwebsite\Excel\Concerns\SkipsOnFailure; use Maatwebsite\Excel\Concerns\WithValidation; use Maatwebsite\Excel\Concerns\SkipsFailures; use Maatwebsite\Excel\Concerns\WithHeadingRow; use App\Models\StudentDetails; class StudentsImport implements ToModel, SkipsOnFailure, WithValidation, WithHeadingRow { use Importable, SkipsFailures; /** * @param Collection $collection */ public function model(array $row) { return new StudentDetails([ 'roll_no' => $row['roll_no'], 'student_id' => $row['student_id'], 'div' => $row['div'], 'name' => $row['name'], 'gender' => $row['gender'], 'user_key' => session()->get('user_id'), 'group_key' => $group_key ]); } public function onFailure(Failure ...$failures) { // Handle the failures how you'd like. } public function rules(): array { return [ 'student_id' =>[ 'required', 'string', 'unique:student_details' ], 'roll_no' =>[ 'required', 'integer' ], 'name' => [ 'required', 'string', ] ]; } }
Mein Hauptziel ist es, den Studentendatensatz in alle zugehörigen Tabellen mit dem Fremdschlüssel „student_id“ einzufügen, wenn der Student in die Tabelle „student_details“ eingefügt wird. Wenn es einen anderen Weg gibt, helfen Sie bitte.
P粉3950561962024-03-29 00:08:31
而不是使用
Maatwebsite\Excel\Concerns\ToModel
您可以使用 Maatwebsite\Excel\Concerns\OnEachRow
。您可以更好地控制每一行发生的情况。
use App\StudentDetails; use Maatwebsite\Excel\Row; use Maatwebsite\Excel\Concerns\OnEachRow; class StudentsImport implements OnEachRow, ... { public function onRow(Row $row) { $rowIndex = $row->getIndex(); $row = $row->toArray(); // create model $studentDetails = StudentDetails::create([ 'roll_no' => $row['roll_no'], 'student_id' => $row['student_id'], 'div' => $row['div'], 'name' => $row['name'], 'gender' => $row['gender'], 'user_key' => session()->get('user_id'), 'group_key' => $group_key /* this variable doesn't seem to be defined anywhere */ ]); // create related models $studentDetails->oral()->create([...]); $studentDetails->endsem()->create([...]); } }
至于让这一切在事务中发生:
DB::transaction(fn () => (new StudentsImport)->import(...));