Maison > Questions et réponses > le corps du texte
Je suis nouveau sur Laravel, Je souhaite insérer les détails de l'étudiant du fichier xlsx dans la base de données MySQL. J'utilise Laravel Excel v3 pour importer des fichiers Excel. Ça fonctionne bien. Cependant, outre l'insertion des détails de l'étudiant dans une table, le même dossier d'identification d'étudiant doit être créé dans toutes les tables associées.
Exemple--> Si vous insérez 1 étudiant dans la table "student_details", vous devez créer 1 enregistrement dans les tables "oral" et "endsem" avec la clé étrangère "student_id".
J'ai organisé des activités pour les enregistrer dans la fiche verbale et la fiche finale. La question est maintenant de savoir comment appliquer l'événement et comment obtenir la carte d'étudiant après avoir créé l'étudiant pour déclencher l'événement. (L'identifiant de l'étudiant sera la valeur auto_increment)
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', ] ]; } }
Mon objectif principal est d'insérer le dossier de l'étudiant dans toutes les tables associées avec la clé étrangère "student_id" lorsque l'étudiant est inséré dans la table "student_details". S'il existe un autre moyen, aidez-moi.
P粉3950561962024-03-29 00:08:31
Au lieu d'utiliser
MaatwebsiteExcelConcernsToModel
您可以使用 MaatwebsiteExcelConcernsOnEachRow
. Vous avez plus de contrôle sur ce qui se passe sur chaque ligne.
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([...]); } }
Quant à la concrétisation des affaires :
DB::transaction(fn () => (new StudentsImport)->import(...));