Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel 6中创建使用外键约束的播种器_Php_Laravel_Eloquent_Foreign Keys_Laravel 6 - Fatal编程技术网

Php 在Laravel 6中创建使用外键约束的播种器

Php 在Laravel 6中创建使用外键约束的播种器,php,laravel,eloquent,foreign-keys,laravel-6,Php,Laravel,Eloquent,Foreign Keys,Laravel 6,我正在尝试创建一个播种器,用“作业”填充数据库,这些作业与带有外键约束的“课程”数据库链接。 因为我对PHP和Laravel6基本上是新手,所以我真的不知道从哪里开始。 我准备好了一台播种机,它可以填充我的“课程”数据库,如下所示: class CoursesTableSeed extends Seeder { /** * Run the database seeds. * * @return void */ public functio

我正在尝试创建一个播种器,用“作业”填充数据库,这些作业与带有外键约束的“课程”数据库链接。 因为我对PHP和Laravel6基本上是新手,所以我真的不知道从哪里开始。 我准备好了一台播种机,它可以填充我的“课程”数据库,如下所示:

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');
    }
}
欢迎来到Stackoverflow! 你可以用不同的方式分配任务。例如:更新现有播种机,或创建其他播种机

这里是另一个播种机的代码(您必须有
课程
作业
型号):


谢谢!播种机本身可以工作,但它不会在我的数据库中放入任何数据,我认为它必须与我的课程或作业模型相关。我是否需要向它们添加一些特定的内容,或者它们是否需要为空?提前谢谢!课程和作业模型可以为空。确保在CoursesTableSeed之后运行AssignmentsTableSeeder。在AssignmentsTableSeeder和CoursesTableSeed中,课程名称也应该是相同的。同时,我设法弄明白了一些事情!通过将:$course=course::create(['name'=>$value['name'],'ecs'=>$value['ecs'])添加到for-each-it-worked中!
<?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);
                    }
                }
            }
        }
    }
}