Sebagai contoh,
ALTER TABLE users ADD UNIQUE KEY(LoginID, Email);
ALTER TABLE users ADD UNIQUE KEY(Email);
ALTER TABLE users ADD UNIQUE KEY(LoginID);
Bagaimana cara melakukannya dengan Knex.Schema.createTable
Saya yakin Anda bisa melakukan ini dengan:
Knex.Schema.createTable('tableName', function(table) {
table.unique(['LoginID', 'Email']);
table.unique('LoginID');
table.unique('Email');
});
Beri tahu saya jika sepertinya tidak berfungsi.
Bekerja, terima kasih! Bersiap untuk beralih dari Sequelize.
saya mencoba menjalankan migrasi
knex.schema.createTable('users', function (table) {
table.increments('id').primary();
table.string('network', 3).notNullable();
table.string('uid', 64).notNullable();
table.unique(['network', 'uid']);
table.timestamps();
}).then(function () {
console.log('Users Table is Created!');
});
Tetapi saya tidak akan mendapatkan indeks unik
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`network` varchar(3) NOT NULL,
`uid` varchar(64) NOT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Apa yang salah?
@ theo-ptz API berubah beberapa waktu lalu. Menurut dokumen , unique
sekarang menjadi metode yang dapat dirantai yang Anda gunakan dengan cara yang sama seperti Anda menggunakan primary
dan notNullable
.
@bendrucker , terima kasih.
Tapi ada sesuatu yang tidak berhasil.
Saya mencoba menjalankan kode ini
knex.schema.createTable('users', function (table) {
table.increments('id').primary();
table.string('network', 3).notNullable();
table.string('uid', 64).unique();
table.timestamps();
})
Saya melihat ini di debug
--> ComQueryPacket
{ command: 3,
sql: 'create table
pengguna (
id int(11) unsigned not null auto_increment primary key,
jaringan varchar(3) not null,
uid varchar(64),
create_at datetime,
updated_at datetime) default character set utf8' }
Saya tidak mendapatkan indeks.
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`network` varchar(3) NOT NULL,
`uid` varchar(64) DEFAULT NULL,
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Apa yang salah?
Apakah ada cara untuk membuat indeks unik gabungan dalam migrasi?
Lihat pengujian integrasi untuk contoh batasan unik komposit:
https://github.com/tgriesser/knex/blob/master/test/integration/schema/index.js#L92
@bendrucker saat Anda menautkan ke file sumber, gunakan tag / komit sebagai ganti master:
Tautan Anda yang tidak berfungsi lagi: https://github.com/tgriesser/knex/blob/master/test/integration/schema/index.js#L92
VS apa yang Anda maksud: https://github.com/tgriesser/knex/blob/0.5.11/test/integration/schema/index.js#L92
Dan menggunakan versi terbaru (0.8.6): https://github.com/tgriesser/knex/blob/0.8.6/test/integration/schema/index.js#L157
Protip: jika Anda menekan tombol "y" saat menjelajah di github, ia akan beralih ke sha url saat ini untuk file yang sedang Anda lihat. Sangat nyaman, saya berharap github akan melakukannya secara otomatis saat Anda menempelkan url gh di komentar
Apakah fitur ini sudah usang karena tidak ada dalam dokumentasi?
@RichardSimko Menurut rangkaian pengujian, sintaks table.unique([...])
untuk kunci majemuk masih didukung, jadi sepertinya ada bug dengan dokumentasinya.
Ya, saya menyadari bahwa itu masih berfungsi, saya hanya khawatir itu akan dihapus karena tidak ada di dokumen.
Jadi apa perbedaan antara table.unique([...])
dan table.primary([...])
?
Sesuai dokumen, tampaknya menggunakan primary([...])
adalah cara yang tepat untuk melakukan kunci utama komposit:
Ketika dipanggil pada satu kolom, kolom itu akan ditetapkan sebagai kunci utama untuk sebuah tabel. Untuk membuat kunci utama majemuk, berikan larik nama kolom:
table.primary(['column1', 'column2'])
. Nama batasan default ketablename_pkey
kecualiconstraintName
ditentukan.
http://knexjs.org/#Schema -primary
Komentar yang paling membantu
Saya yakin Anda bisa melakukan ini dengan:
Beri tahu saya jika sepertinya tidak berfungsi.