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