dresende / node-orm2

Object Relational Mapping
http://github.com/dresende/node-orm2
MIT License
3.07k stars 379 forks source link

hasMany with reverse and key omits primary key in mysql #810

Open maritaria opened 6 years ago

maritaria commented 6 years ago
    let User = db.define("user", {
        name: { type: "text", required: true, unique: true },
        task_name: String,
        task_data: Object,
        last_seen: { type: 'date', time: true },
        card_url: { type: 'text' },
    });

    let Group = db.define("group", {
        name: { type: "text", required: true },
        general_chat: { type: "text", required: true, unique: true },
        admin_chat: { type: "text", required: false, unique: true },
    });
    Group.hasMany("members", User, {
            rank: [ "unverified", "member", "admin" ],
        }, { reverse: "groups", key: true });

With debug enabled I get the following querries:

(orm/mysql) SHOW TABLES LIKE 'user'
(orm/mysql) CREATE TABLE `user` (`name` VARCHAR(255) NOT NULL, `task_name` VARCHAR(255), `task_data` BLOB, `last_seen` DATETIME, `card_url` VARCHAR(255), `id` INT(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`))
(orm/mysql) SELECT index_name, column_name, non_unique FROM information_schema.statistics WHERE table_schema = 'fetguard' AND table_name = 'user'
(orm/mysql) CREATE UNIQUE INDEX `name_unique` ON `user` (`name`)
(orm/mysql) SHOW TABLES LIKE 'group_members'
(orm/mysql) CREATE TABLE `group_members` (`members_id` INTEGER NOT NULL, `group_id` INTEGER NOT NULL, `rank` ENUM ('unverified','member','admin'))
(orm/mysql) SELECT index_name, column_name, non_unique FROM information_schema.statistics WHERE table_schema = 'fetguard' AND table_name = 'group_members'
(orm/mysql) CREATE INDEX `members_id_index` ON `group_members` (`members_id`)
(orm/mysql) CREATE INDEX `group_id_index` ON `group_members` (`group_id`)
(orm/mysql) SHOW TABLES LIKE 'group'
(orm/mysql) CREATE TABLE `group` (`name` VARCHAR(255) NOT NULL, `general_chat` VARCHAR(255) NOT NULL, `admin_chat` VARCHAR(255), `id` INT(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`))
(orm/mysql) SELECT index_name, column_name, non_unique FROM information_schema.statistics WHERE table_schema = 'fetguard' AND table_name = 'group'
(orm/mysql) CREATE UNIQUE INDEX `general_chat_unique` ON `group` (`general_chat`)
(orm/mysql) CREATE UNIQUE INDEX `admin_chat_unique` ON `group` (`admin_chat`)
(orm/mysql) SHOW TABLES LIKE 'group_members'
(orm/mysql) SHOW TABLES LIKE 'ticket'
(orm/mysql) CREATE TABLE `ticket` (`status` ENUM ('started','expired','submitted','completed','denied'), `task` VARCHAR(255), `pic` VARCHAR(255), `started_at` DATETIME NOT NULL, `finish_before` DATETIME NOT NULL, `signed_at` DATETIME, `id` INT(11) NOT NULL AUTO_INCREMENT, `user_id` INTEGER NOT NULL, `group_id` INTEGER NOT NULL, `admin_id` INTEGER, PRIMARY KEY (`id`))

In which you can see the querry for the group_members table has no primary key. Removing the reverse option causes a querry with primary key to be created.