सबसे पहले, मैं आपको बताना चाहता हूं, मैंने इस समस्या को इंटरनेट की खोज की है और मैं इस समस्या को हल करने में सक्षम नहीं हूं।CONSTRAIN लार्वेल 5 स्कीमा बिल्डर पर अद्वितीय
मेरी समस्या मेरी तालिकाओं की प्राथमिक कुंजी के साथ है।
2 टेबल्स, घटनाओं और event_guest
+-----------+
| event |
+-----------+
| eventid |
+-----------+
+-------------+
| event_guest |
+-------------+
| guestid |
| eventid |
| firstname |
| lastname |
| email |
+-------------+
प्रत्येक घटना कई event_guest
है है, लेकिन प्रत्येक अतिथि के ईमेल प्रत्येक घटना पर अद्वितीय होना चाहिए। यह प्रविष्टि रिकॉर्ड चाहिए ईमेल घटना पर सेट नहीं है
EventGuests::firstOrCreate(['eventid' => $eventid,'firstname' => 'Ivan', 'lastname'=>'Bravo', 'email'=>'[email protected]');
हैं:
मेरी नियंत्रक पर मैं मिलता है या EventGuest मॉडल पर firstOrCreate विधि का उपयोग कर बनाना चाहते हैं।
+-----------+----------+-----------+-----------+----------------+
| guestid | eventid | firstname | lastname | email |
+-----------+----------+-----------+-----------+----------------+
| 1 | 1 | Ivan | Bravo | [email protected] |
+-----------+----------+-----------+-----------+----------------+
क्या मैं इसे eventid
प्राथमिक कुंजी और guestid
auto_increment
क्षेत्र के रूप में तो यह प्रत्येक घटना पर 1 को रीसेट कर सकते हैं के रूप में है की जरूरत है। उदाहरण के लिए:
+-----------+----------+-----------+-----------+----------------+
| guestid | eventid | firstname | lastname | email |
+-----------+----------+-----------+-----------+----------------+
| 1 | 1 | Ivan | Bravo | [email protected] |
| 2 | 1 | John | Doe | [email protected] |
| 1 | 2 | Ivan | Bravo | [email protected] |
+-----------+----------+-----------+-----------+----------------+
और मुझे डुप्लिकेट पंक्तियों को रोकने के लिए एक अद्वितीय फ़ील्ड के रूप में ईमेल की भी आवश्यकता है।
वर्तमान में मैं उपयोग कर रहा हूँ Laravel 5 माइग्रेशन, लेकिन यह इस त्रुटि का संकेत देता है जब मैं प्राथमिक क्षेत्रों रीसेट करने का प्रयास:
Schema::create('event_guest', function(Blueprint $table) {
$table->integer('guestid', true);
$table->integer('eventid');
$table->integer('contactid')->nullable();
$table->string('firstname', 256);
$table->string('lastname', 256);
$table->string('email', 256);
$table->unique(array('email','name'));
$table->primary(array('eventid','guestid'));
});
मैं वास्तव में मदद की जरूरत है:
Multiple primary key defined (SQL: alter table `event_guest` add primary key event_guest_eventid_guestid_primary(`eventid`, `guestid`))
यह मेरा माइग्रेशन कोड है इसे ठीक से समझने के लिए।
मैं अतीत में कोई परेशानी नहीं का उपयोग कर था:
create table `event_guest` (
`guestid` int(11) NOT NULL AUTO_INCREMENT,
`eventid` int(11) NOT NULL DEFAULT '0',
`firstname` varchar(255) NOT NULL,
`lastname` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
PRIMARY KEY (`eventid`,`guestid`),
CONSTRAINT guest UNIQUE (eventid,email)
) ENGINE=MyISAM
अब
अतिथि आईडी, प्रथम नाम, अंतिम नाम, और ईमेल को "अतिथि" नामक अपनी तालिका में तोड़ना संभव होगा। फिर 'event_guest' की स्कीमा को event_id और guest_id में बदलें? –