2015-10-18 2 views
0

Я создал многие ко многим отношения с помощью сводной таблицы, я могу снять записи с помощью ->detach($id), который отлично, но когда я пытаюсь прикрепить:Зачем мне: Нарушение ограничений целостности: 1452?

$criteria->criterias()->attach($criteria_id); 

я получаю эту ошибку:

Next exception 'Illuminate\Database\QueryException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`forge`.`criteria_criteria`, CONSTRAINT `criteria_criteria_criteria_id_foreign` FOREIGN KEY (`criteria_id`) REFERENCES `criterias` (`id`) ON DELETE CASCADE) (SQL: insert into `criteria_criteria` (`central_criteria_id`, `criteria_id`) values (11893, 8647))' in /home/forge/default/vendor/laravel/framework/src/Illuminate/Database/Connection.php:651 

Мои модели:

class Criteria extends Model { 

    protected $table = 'criterias'; 
    public $timestamps = true; 


    public function criterias() 
    { 
     return $this->belongsToMany('App\Criteria', 'criteria_criteria', 'central_criteria_id', 'criteria_id'); 
    } 

} 

class CriteriaCriteria extends Model { 
    protected $table = 'criteria_criteria'; 
} 

И вот мои миграции для них:

class CreateCriteriasTable extends Migration { 

    public function up() 
    { 
     Schema::create('criterias', function(Blueprint $table) { 
      $table->increments('id'); 
      $table->timestamps(); 
     }); 
    } 


class CreateCriteriaCriteriaPivotTable extends Migration 
{ 

    public function up() 
    { 
     Schema::create('criteria_criteria', function(Blueprint $table) { 
      $table->integer('central_criteria_id')->unsigned()->index(); 
      $table->foreign('central_criteria_id')->references('id')->on('criterias')->onDelete('cascade'); 
      $table->integer('criteria_id')->unsigned()->index(); 
      $table->foreign('criteria_id')->references('id')->on('criterias')->onDelete('cascade'); 
     }); 
    } 

Любая идея, как это решить?

+0

Может быть, что критерии с идентификатором 8647 не было больше не существует? Это дало бы эту ошибку –

ответ

1

Попробуйте добавить ->unsigned()->index(); к вашей миграции, как это:

class CreateCriteriasTable extends Migration { 

    public function up() 
    { 
    Schema::create('criterias', function(Blueprint $table) { 
     $table->increments('id')->unsigned()->index(); 
     $table->timestamps(); 
    }); 
    } 
+0

http://laravel.io/forum/09-18-2014-foreign-key-not-saving-in- migigration – simo

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