2012-12-28 8 views
43

Próbuję wstawić wartości do mojej tabeli komentarzy i pojawia się błąd. Mówi, że nie mogę dodawać ani aktualizować rzędów dzieci i nie mam pojęcia, co to oznacza.Naruszenie ograniczenia integralności: 1452 Nie można dodać lub zaktualizować wiersza podrzędnego:

mój schemat wygląda tak

-- ---------------------------- 
-- Table structure for `comments` 
-- ---------------------------- 
DROP TABLE IF EXISTS `comments`; 
CREATE TABLE `comments` (
    `id` varchar(36) NOT NULL, 
    `project_id` varchar(36) NOT NULL, 
    `user_id` varchar(36) NOT NULL, 
    `task_id` varchar(36) NOT NULL, 
    `data_type_id` varchar(36) NOT NULL, 
    `data_path` varchar(255) DEFAULT NULL, 
    `message` longtext, 
    `created` datetime DEFAULT NULL, 
    `modified` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_comments_users` (`user_id`), 
    KEY `fk_comments_projects1` (`project_id`), 
    KEY `fk_comments_data_types1` (`data_type_id`), 
    CONSTRAINT `fk_comments_data_types1` FOREIGN KEY (`data_type_id`) REFERENCES `data_types` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
    CONSTRAINT `fk_comments_projects1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION, 
    CONSTRAINT `fk_comments_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf32; 

-- ---------------------------- 
-- Records of comments 
-- ---------------------------- 

-- ---------------------------- 
-- Table structure for `projects` 
-- ---------------------------- 
DROP TABLE IF EXISTS `projects`; 
CREATE TABLE `projects` (
    `id` varchar(36) NOT NULL, 
    `user_id` varchar(36) NOT NULL, 
    `title` varchar(45) DEFAULT NULL, 
    `description` longtext, 
    `created` datetime DEFAULT NULL, 
    `modified` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_projects_users1` (`user_id`), 
    CONSTRAINT `fk_projects_users1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf32; 

-- ---------------------------- 
-- Records of projects 
-- ---------------------------- 
INSERT INTO `projects` VALUES ('50dcbc72-3410-4596-8b71-0e80ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', 'Brand New Project', 'This is a brand new project', '2012-12-27 15:24:02', '2012-12-27 15:24:02'); 

oraz oświadczenie mysql próbuję zrobić wyglądać tak

INSERT INTO `anthonyl_fbpj`.`comments` (`project_id`, `user_id`, `task_id`, `data_type_id`, `message`, `modified`, `created`, `id`) 
VALUES ('50dc845a-83e4-4db3-8705-5432ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', '1', '50d32e5c-abdc-491a-a0ef-25d84e9f49a8', 'this is a test', '2012-12-27 19:20:46', '2012-12-27 19:20:46', '50dcf3ee-8bf4-4685-aa45-4eb4ae7aaee3') 

Błąd pojawia wygląda następująco

SQLSTATE [23000]: Naruszenie ograniczenia integralności: 1452 Nie można dodać lub zaktualizować wiersza podrzędnego: cudzoziemca ograniczenie klucza nie powiodło się (anthonyl_fbpj. comments, CONSTRAINT fk_comments_projects1 FOREIGN KEY (project_id) odniesienia projects (id) ON DELETE NO DZIAŁANIE ON UPDATE NO ACTION)

Odpowiedz

56

To po prostu oznacza, że ​​wartość dla kolumny project_id na stole comments wstawiasz nie istnieje na stole projects. Należy pamiętać, że wartości kolumny project_id na tabeli comments zależą od wartości ID w tabeli Projects.

Wartość 50dc845a-83e4-4db3-8705-5432ae7aaee3 wstawiana dla kolumny project_id nie istnieje w tabeli projects.

+14

Co jeśli mam wartości w tej tabeli? Mam ten sam błąd, ale mam wartości w dopasowaniu tabeli i identyfikatora. –

+0

Miałem podobny problem. Usunięcie starych danych z tabeli rozwiązało problem w moim przypadku. – Yojan

28

Upewnij się, że masz project_id we właściwości fillable Twojego modelu Comment.

Miałem ten sam problem, I to był powód.

+4

To samo, używając Laravel. Dobry chwyt. – PapaHotelPapa

3

Upewnij się również, że dodany klucz obcy jest tego samego typu, co oryginalna kolumna, jeśli kolumna, do której się odnosisz, nie jest tym samym typem, który również zawiedzie.

1

Jeśli ktoś używa Laravel i otrzymuje ten problem. Dostawałem to również, a problem był w kolejności, w której wstawiałem identyfikatory (to jest klucze obce) w tabeli przestawnej.

Aby być konkretne, znaleźć poniżej przykład za wiele do wielu relacji:

wordtokens < -> wordtoken_wordchunk < -> wordchunks

// wordtoken_wordchunk table 
Schema::create('wordtoken_wordchunk', function(Blueprint $table) { 
     $table->integer('wordtoken_id')->unsigned(); 
     $table->integer('wordchunk_id')->unsigned(); 

     $table->foreign('wordtoken_id')->references('id')->on('word_tokens')->onDelete('cascade'); 
     $table->foreign('wordchunk_id')->references('id')->on('wordchunks')->onDelete('cascade'); 

     $table->primary(['wordtoken_id', 'wordchunk_id']); 
    }); 

// wordchunks table 
Schema::create('wordchunks', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->timestamps(); 
     $table->string('text'); 
    }); 

// wordtokens table 
Schema::create('word_tokens', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('text'); 
}); 

Teraz moje modele wyglądać następująco:

class WordToken extends Model 
{ 
    public function wordchunks() { 
     return $this->belongsToMany('App\Wordchunk'); 
    } 
} 

class Wordchunk extends Model 
{ 

    public function wordTokens() { 
     return $this->belongsToMany('App\WordToken', 'wordtoken_wordchunk', 'wordchunk_id', 'wordtoken_id'); 
    } 
} 

Naprawiłem problem, zamieniając kolejność "wordchunk_id" i "wordtoken_id" w modelu Wordchunk.

Dla uzupełniania kodu, to w jaki sposób utrzymują się modele:

private function persistChunks($chunks) { 
    foreach ($chunks as $chunk) { 
     $model = new Wordchunk(); 
     $model->text = implode(' ', array_map(function($token) {return $token->text;}, $chunk)); 
     $tokenIds = array_map(function($token) {return $token->id;}, $chunk); 
     $model->save(); 
     $model->wordTokens()->attach($tokenIds); 
    } 
} 
Powiązane problemy