2012-12-28 8 views
43

मैं अपनी टिप्पणियों की तालिका में मान डालने की कोशिश कर रहा हूं और मुझे एक त्रुटि मिल रही है। यह कह रहा है कि मैं बाल पंक्ति को जोड़ या अपडेट नहीं कर सकता और मुझे नहीं पता कि इसका क्या अर्थ है।ईमानदारी बाधा उल्लंघन: 1452 बच्चे की पंक्ति को जोड़ या अपडेट नहीं कर सकता:

मेरी स्कीमा लग रहा है इस

-- ---------------------------- 
-- 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'); 

और mysql बयान मुझे क्या करना कोशिश कर रहा हूँ की तरह कुछ इस

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') 

तरह दिखता है त्रुटि मैं इस

की तरह दिखता है एसक्यूएलएसटीएटी [23000]: ईमानदारी बाधा उल्लंघन: 1452 जोड़ नहीं सकता है या एक बच्चे की पंक्ति अपडेट करें: एक विदेशी कुंजी बाधा (anthonyl_fbpj विफल रहता है। comments, बाधा fk_comments_projects1 विदेशी कुँजी (project_id) संदर्भ projects (id) पर हटाते हैं तो अद्यतन पर कार्रवाई कोई कार्रवाई नहीं)

उत्तर

56

यह सिर्फ अर्थ है कि तालिका comments आप डालने कर रहे हैं पर स्तंभ project_id के लिए मूल्य नहीं है तालिका projects पर मौजूद है। ध्यान रखें कि तालिका पर कॉलम project_id के मान तालिका Projects पर ID के मानों पर निर्भर है।

मूल्य 50dc845a-83e4-4db3-8705-5432ae7aaee3 आप स्तंभ project_id के लिए डालने कर रहे हैं तालिका projects पर मौजूद नहीं है।

+14

क्या होगा यदि मैं उस तालिका में मूल्य है? मेरे पास एक ही त्रुटि है लेकिन मेरे पास टेबल और आईडी मिलान में मूल्य हैं। –

+0

मेरे पास एक समान समस्या थी। तालिका से पुराने डेटा को हटाने से मेरे मामले में समस्या हल हो गई। – Yojan

28

सुनिश्चित करें कि आपके मॉडल की संपत्ति project_id है।

मुझे एक ही समस्या थी, और यही कारण था।

+4

लैरावेल का उपयोग करके, यहां वही। अच्छा पकड़ा। – PapaHotelPapa

3

यह भी सुनिश्चित करें कि आपके द्वारा जोड़ी गई विदेशी कुंजी मूल कॉलम का एक ही प्रकार है, यदि आपके द्वारा संदर्भित कॉलम एक ही प्रकार का नहीं है तो यह भी असफल हो जाएगा।

1

यदि कोई लैरवेल का उपयोग कर रहा है और यह समस्या हो रही है। मैं इसे भी प्राप्त कर रहा था और मुद्दा उस क्रम में था जिसमें मैं पिवट तालिका में आईडी (यानी, विदेशी कुंजी) डाल रहा था।

ठोस होने के लिए, कई रिश्ते के लिए कई के लिए एक उदाहरण नीचे खोजने के लिए:

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'); 
}); 

अब अपने मॉडल इस प्रकार की तरह लग रहे:

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'); 
    } 
} 

मैंने वर्डचंक मॉडल में 'wordchunk_id' और 'wordtoken_id' के क्रम का आदान-प्रदान करके समस्या को ठीक किया।

कोड पूरा होने के लिए, यह मैं कैसे मॉडल जारी रहती है:

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); 
    } 
}