Skip to content

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

@maritaria

Description

@maritaria
	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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions