Я создал многие ко многим отношения с помощью сводной таблицы, я могу снять записи с помощью ->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');
});
}
Любая идея, как это решить?
Может быть, что критерии с идентификатором 8647 не было больше не существует? Это дало бы эту ошибку –