So führen Sie eine benutzerdefinierte Aufgabe aus oder lösen ein Ereignis aus, wenn Sie eine XLSX-Datei über Laravel Excel importieren
P粉312195700
P粉312195700 2024-03-28 18:53:50
0
1
387

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粉312195700
P粉312195700

Antworte allen(1)
P粉395056196

而不是使用 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(...));
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!