首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Laravel 6中创建一个使用外键约束的种子程序

在Laravel 6中创建一个使用外键约束的种子程序
EN

Stack Overflow用户
提问于 2020-02-17 02:50:24
回答 1查看 144关注 0票数 0

我正在尝试创建一个播种器,它用与带有外键约束的“课程”数据库链接的“作业”填充数据库。由于我是PHP和Laravel 6的新手,一般情况下,我真的不知道从哪里开始。我已经有了一个种子程序,它填充了我的“课程”数据库,如下所示:

代码语言:javascript
复制
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和编程都是很陌生的。另外,这是我对作业的迁移:

代码语言:javascript
复制
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');
    }
}
EN

回答 1

Stack Overflow用户

发布于 2020-02-17 04:54:09

欢迎来到Stackoverflow!你可以用不同的方式为你的作业设定种子。例如:更新现有的种子程序,或创建另一个种子程序。

下面是另一个种子程序的代码(你必须有CourseAssignment模型):

代码语言:javascript
复制
<?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

之后,您将获得以下结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60252007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档