Создание сеялки в Laravel 6, которая работает с ограничением внешнего ключа - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь создать сеялку, которая заполняет базы данных «Назначениями», которые связаны с базой данных «Курса» с ограничением внешнего ключа. Так как я довольно новичок в PHP и Laravel 6 в целом, я не знаю, с чего начать. У меня уже есть сеялка, которая заполняет мою базу данных «Курс», которая выглядит следующим образом:

class  CoursesTableSeed extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('courses')->insert([[
            'name' => 'Opleidings- en beroepsoriëntatie',
            'ecs' => '2.5'
        ],[
            'name' => 'Computer science basics',
            'ecs' => '7.5'
        ],[
            'name' => 'Programming basics',
            'ecs' => '5'
        ],[
            'name'=>'Professional skills 1',
            'ecs'=>'2.5',

        ],[
            'name'=>'HZ Personality',
            'ecs'=>'2.5',

        ],[
            'name'=>'Object-oriented programming',
            'ecs'=>'10',

        ],[
            'name'=>'Professional skills 2',
            'ecs'=>'2.5',

        ],[
            'name'=>'Professionele werkplek',
            'ecs'=>'2.5',

        ],[
            'name'=>'Framework development 1',
            'ecs'=>'5',

        ],[
            'name'=>'Framework project 1',
            'ecs'=>'5',

        ],[
            'name'=>'Professional skills 3',
            'ecs'=>'2.5',

        ],[
            'name'=>'IT Personality 1',
            'ecs'=>'2.5',

        ],[
            'name'=>'Framework development 2',
            'ecs'=>'5',

        ],[
            'name'=>'Framework project 2',
            'ecs'=>'5',

        ]
        ]);
    }
}

Теперь я хочу сделать то же самое с моей базой данных заданий, но я не могу понять, как, так как я тоже хочу иметь «Назначения» связаны с соответствующими «Курсами», поэтому, когда я удаляю курс, он также удаляет связанные с ним назначения. Если этот вопрос немного расплывчатый, извините за это. Я довольно новичок в PHP laravel и программировании в целом. Кроме того, это моя миграция для заданий:

class CreateAssignmentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('assignments', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('course_id');
            $table->text('name');
            $table->decimal('weight',3,1)->nullable();
            $table->decimal('grade', 3, 1)->nullable();
            $table->timestamps();

            $table->foreign('course_id')
                ->references('id')
                ->on('courses')
                ->onDelete('cascade');

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('assignments');
    }
}

1 Ответ

0 голосов
/ 16 февраля 2020

Добро пожаловать в Stackoverflow! Вы можете заполнить свои задания по-разному. Например: обновить существующую сеялку или создать другую сеялку.

Здесь код для другой сеялки (необходимо иметь модели Course и Assignment):

<?php

use App\Assignment;
use App\Course;
use Illuminate\Database\Seeder;

class AssignmentsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $data = [
            [
                'name' => 'Opleidings- en beroepsoriëntatie',
                'assignments' => [
                    [
                        'name' => 'Assignment 1',
                        'weight' => 1.5,
                        'grade' => 1.1,
                    ],
                    [
                        'name' => 'Assignment 2',
                        'weight' => 2.0,
                        'grade' => 1.2,
                    ],
                ]
            ],
            [
                'name' => 'Computer science basics',
                'assignments' => [
                    [
                        'name' => 'Assignment 3',
                        'weight' => 1.5,
                        'grade' => 1.0,
                    ],
                    [
                        'name' => 'Assignment 4',
                        'weight' => 1.5,
                        'grade' => 1.0,
                    ],
                    [
                        'name' => 'Assignment 5',
                        'weight' => 1.5,
                        'grade' => 1.0,
                    ],
                ]
            ],
        ];

        // Loops through courses
        foreach ($data as $key => $value) {
            $course = Course::where('name', $value['name'])->first();

            if ($course instanceof Course) {
                if (isset($value['assignments']) && is_array($value['assignments'])) {
                    // Loops through assignments
                    foreach ($value['assignments'] as $assignment) {
                        $assignment['course_id'] = $course->id;
                        Assignment::firstOrCreate($assignment);
                    }
                }
            }
        }
    }
}

Поместите этот код в database/seeds/AssignmentsTableSeeder.php файла и после этого вызывайте эту консольную команду:

composer dump-autoload

php artisan db:seed --class=AssignmentsTableSeeder

После этого вы получите следующий результат

enter image description here

...