TypeORM createQueryBuilder where 语句不考虑实体列名称
TypeORM createQueryBuilder where statement not respecting Enitity column name
我有一个预先存在的数据库 table,其中有一列名称为 account_number
,但是,我想在我的代码中将此列引用为 accountNumber
。
我有以下实体,我将 accountNumber
的 属性 类型的列名称设置为 account_number
import { ObjectType, Field } from 'type-graphql';
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from 'typeorm';
@ObjectType()
@Entity({ database: 'main', name: 'account' })
class Account extends BaseEntity {
@Field(() => String)
@Column({ name: 'account_number' })
@PrimaryGeneratedColumn()
accountNumber!: string;
@Field(() => String)
@Column()
organisation!: string;
}
export default Account;
这是我遇到问题的查询生成器
await AccountRepository
.createQueryBuilder('a')
.where('a.`account_number` = :accountNumber', { accountNumber: "abc123" })
.getOne();
预期行为
使用 account_number
列解析的查询,如 Column
装饰器中所述。
SELECT `a`.`account_number` AS `a_accountNumber`,
`a`.`organisation` AS `a_organisation`
FROM `main`.`account` `a`
WHERE a.`account_number` = 'abc123'
实际行为
但是,它似乎想使用 accountNumber
而不是 account_number
,即使我在 Entity
中这样设置了它
SELECT `a`.`accountNumber` AS `a_accountNumber`,
`a`.`organisation` AS `a_organisation`
FROM `main`.`account` `a`
WHERE a.`account_number` = 'abc123'
看起来你正在做与这个问题相同的事情:
Typeorm ignoring @column name of columns
我不清楚这是否记录在案,但我认为明确命名的 PrimaryColumn()
和 PrimaryGeneratedColumn()
有问题。如果你绝对需要生成的列,你应该可以使用
@Column(name: 'account_number',
// "serial" type is equivalent to AI in PG
type: 'serial',
primary: true)
accountNumber: string;
(从这里开始:https://github.com/typeorm/typeorm/issues/1517)。
此外,您不需要在主键上使用 !
,它始终是必需的。
我有一个预先存在的数据库 table,其中有一列名称为 account_number
,但是,我想在我的代码中将此列引用为 accountNumber
。
我有以下实体,我将 accountNumber
的 属性 类型的列名称设置为 account_number
import { ObjectType, Field } from 'type-graphql';
import { Entity, PrimaryGeneratedColumn, Column, BaseEntity } from 'typeorm';
@ObjectType()
@Entity({ database: 'main', name: 'account' })
class Account extends BaseEntity {
@Field(() => String)
@Column({ name: 'account_number' })
@PrimaryGeneratedColumn()
accountNumber!: string;
@Field(() => String)
@Column()
organisation!: string;
}
export default Account;
这是我遇到问题的查询生成器
await AccountRepository
.createQueryBuilder('a')
.where('a.`account_number` = :accountNumber', { accountNumber: "abc123" })
.getOne();
预期行为
使用 account_number
列解析的查询,如 Column
装饰器中所述。
SELECT `a`.`account_number` AS `a_accountNumber`,
`a`.`organisation` AS `a_organisation`
FROM `main`.`account` `a`
WHERE a.`account_number` = 'abc123'
实际行为
但是,它似乎想使用 accountNumber
而不是 account_number
,即使我在 Entity
SELECT `a`.`accountNumber` AS `a_accountNumber`,
`a`.`organisation` AS `a_organisation`
FROM `main`.`account` `a`
WHERE a.`account_number` = 'abc123'
看起来你正在做与这个问题相同的事情:
Typeorm ignoring @column name of columns
我不清楚这是否记录在案,但我认为明确命名的 PrimaryColumn()
和 PrimaryGeneratedColumn()
有问题。如果你绝对需要生成的列,你应该可以使用
@Column(name: 'account_number',
// "serial" type is equivalent to AI in PG
type: 'serial',
primary: true)
accountNumber: string;
(从这里开始:https://github.com/typeorm/typeorm/issues/1517)。
此外,您不需要在主键上使用 !
,它始终是必需的。