Trước hết, tôi muốn nói với bạn, tôi đã tìm kiếm trên Internet vấn đề này và tôi đã không thể giải quyết vấn đề này.CONSTRAIN Độc đáo trên Laravel 5 Schema Builder
Vấn đề của tôi là với các khóa chính của bảng.
Tôi có 2 bảng, sự kiện và event_guest
+-----------+
| event |
+-----------+
| eventid |
+-----------+
+-------------+
| event_guest |
+-------------+
| guestid |
| eventid |
| firstname |
| lastname |
| email |
+-------------+
Mỗi sự kiện có nhiều event_guest
, nhưng email của từng khách phải là duy nhất trên mỗi sự kiện.
On điều khiển của tôi tôi muốn có được hoặc tạo ra bằng cách sử dụng phương pháp firstOrCreate trên EventGuest mẫu:
EventGuests::firstOrCreate(['eventid' => $eventid,'firstname' => 'Ivan', 'lastname'=>'Bravo', 'email'=>'[email protected]');
Nếu email không được thiết lập về sự kiện này thì phải ghi lại sự xâm nhập.
+-----------+----------+-----------+-----------+----------------+
| guestid | eventid | firstname | lastname | email |
+-----------+----------+-----------+-----------+----------------+
| 1 | 1 | Ivan | Bravo | [email protected] |
+-----------+----------+-----------+-----------+----------------+
Những gì tôi cần nó là eventid
làm khóa chính và guestid
như auto_increment
lĩnh vực để nó có thể thiết lập lại tới 1 trên mỗi sự kiện. Ví dụ:
+-----------+----------+-----------+-----------+----------------+
| guestid | eventid | firstname | lastname | email |
+-----------+----------+-----------+-----------+----------------+
| 1 | 1 | Ivan | Bravo | [email protected] |
| 2 | 1 | John | Doe | [email protected] |
| 1 | 2 | Ivan | Bravo | [email protected] |
+-----------+----------+-----------+-----------+----------------+
Và tôi cũng cần email làm trường duy nhất để ngăn các hàng trùng lặp.
Hiện nay tôi đang sử dụng Laravel 5 Migrations, nhưng khi tôi cố gắng để thiết lập lại các lĩnh vực chính nó nhắc nhở lỗi này:
Multiple primary key defined (SQL: alter table `event_guest` add primary key event_guest_eventid_guestid_primary(`eventid`, `guestid`))
Đây là mã di cư của tôi:
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'));
});
tôi thực sự cần sự giúp đỡ để hiểu điều này đúng cách.
tôi đã không gặp khó khăn trong quá khứ sử dụng:
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
Bây giờ
Có thể chia nhỏ id khách, tên, họ và email vào bảng riêng của họ có tên là "khách" hay không. Sau đó thay đổi lược đồ 'event_guest' thành event_id và guest_id? –