我正在尝试创建一个播种器,它用与带有外键约束的“课程”数据库链接的“作业”填充数据库。由于我是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');
}
}发布于 2020-02-17 04:54:09
欢迎来到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
之后,您将获得以下结果

https://stackoverflow.com/questions/60252007
复制相似问题