2016-01-21 2 views
1

Я делаю свой первый проект laravel. Я создал две таблицы в моей базе данных и попытался засеять данные в каждой таблице. Данные для первой таблицы (проектов) были вставлены как ожидалось, но не было данных был вставлен во вторую таблицу (задачи). И когда я запустил php artisan db:seed command, я получаю следующую ошибку.ошибка при посеве в базе данных в laravel

«нарушение ограничения целостности: 1062 Дублированный запись„1“для ключа ПЕРВИЧНОГО

Что может быть причиной и как я могу решить эту проблему

Вот мой расширенный класс миграции

?
public function up() 
{ 
    // 
    Schema::create('projects', function(Blueprint $table) 
    { 
     $table->increments('id'); 
     $table->string('name')->default('');    
     $table->string('slug')->default('');    
     $table->timestamps(); 
    }); 

    Schema::create('tasks', function(Blueprint $table) {    

     $table->increments('id');    
    // $table->integer('project_id')->unsigned()->default(0);   
     $table->foreign('project_id')->references('id')->on('projects')->onDelete('cascade');    
     $table->string('name')->default('');   
     $table->string('slug')->default('');   
     $table->boolean('completed')->default(false);    
     $table->text('description')->default('');    
     $table->timestamps();  

    }); 
} 

класс сеялка для проектов таблицы

class projectSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 
     // 
     $projects = array(
      ['id' => 1, 'name' => 'Project 1', 'slug' => 'project-1', 'created_at' => new DateTime, 'updated_at' => new DateTime], 
      ['id' => 2, 'name' => 'Project 2', 'slug' => 'project-2', 'created_at' => new DateTime, 'updated_at' => new DateTime], 
      ['id' => 3, 'name' => 'Project 3', 'slug' => 'project-3', 'created_at' => new DateTime, 'updated_at' => new DateTime] 
     ); 

     // Uncomment the below to run the seeder 
     DB::table('projects')->insert($projects); 
    } 
} 

для задач стол:

public function run() 
    { 
     // 
      $tasks = array(
      ['id' => 1, 'name' => 'Task 1', 'slug' => 'task-1', 'project_id' => 1, 'completed' => false, 'description' => 'My first task', 'created_at' => new DateTime, 'updated_at' => new DateTime], 
      ['id' => 2, 'name' => 'Task 2', 'slug' => 'task-2', 'project_id' => 1, 'completed' => false, 'description' => 'My first task', 'created_at' => new DateTime, 'updated_at' => new DateTime], 
      ['id' => 3, 'name' => 'Task 3', 'slug' => 'task-3', 'project_id' => 1, 'completed' => false, 'description' => 'My first task', 'created_at' => new DateTime, 'updated_at' => new DateTime], 
      ['id' => 4, 'name' => 'Task 4', 'slug' => 'task-4', 'project_id' => 1, 'completed' => true, 'description' => 'My second task', 'created_at' => new DateTime, 'updated_at' => new DateTime], 
      ['id' => 5, 'name' => 'Task 5', 'slug' => 'task-5', 'project_id' => 1, 'completed' => true, 'description' => 'My third task', 'created_at' => new DateTime, 'updated_at' => new DateTime], 
      ['id' => 6, 'name' => 'Task 6', 'slug' => 'task-6', 'project_id' => 2, 'completed' => true, 'description' => 'My fourth task', 'created_at' => new DateTime, 'updated_at' => new DateTime], 
      ['id' => 7, 'name' => 'Task 7', 'slug' => 'task-7', 'project_id' => 2, 'completed' => false, 'description' => 'My fifth task', 'created_at' => new DateTime, 'updated_at' => new DateTime] 
     ); 

     //// Uncomment the below to run the seeder 
     DB::table('tasks')->insert($tasks); 
    } 
} 
+0

Как выглядят ваши миграции для двух таблиц? – Bogdan

+0

расширенный класс миграции добавлен в сообщение. –

+0

Вы впервые запустили скрипт? проверить таблицу в базе данных. – Naumov

ответ

2

id колонка для обеих таблиц устанавливается на автоматического приращения, поэтому просто удалите его из массивов вы вводные. Потому что в таблице могут быть другие записи с тем же id, поэтому просто позвольте MySQL обрабатывать генератор id.


Если вы хотите, чтобы убедиться, что таблицы содержат только значения, которые вы хотите удалить семена, вы можете очистить таблицы в каждом классе высева:

... 
DB::table('projects')->truncate(); 
DB::table('projects')->insert($projects); 

и

... 
DB::table('tasks')->truncate(); 
DB::table('tasks')->insert($tasks); 

Таким образом, вы гарантируете, что нет более старых записей, которые могут вызвать нарушения ограничений из-за дубликатов значений id.

Смежные вопросы