- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Typeorm结合 class-validator ,所以我定义了一个这样的实体:
import {
Entity,
PrimaryGeneratedColumn,
Column,
BaseEntity,
BeforeInsert,
BeforeUpdate,
getRepository
} from "typeorm";
import {
validateOrReject,
IsDefined,
} from "class-validator";
import errors from 'restify-errors';
@Entity()
export class License extends BaseEntity {
@PrimaryGeneratedColumn('uuid')
public id!: string;
@Column({ nullable: false })
@IsDefined({ message: 'name field was not provided' })
public name!: string;
@Column({ nullable: false })
@IsDefined({ message: 'description field was not provided' })
public description!: string;
@BeforeInsert()
@BeforeUpdate()
async validate() {
await validateOrReject(this, { skipUndefinedProperties: true });
// Check if license already exists
if ((await getRepository(License).count({ name: this.name }) > 0))
throw new errors.BadRequestError(`There is already a license with name of ${this.name}`);
}
}
我还定义了一个运行
getMany
的中间件从
Entity<T>
检索数据存储库,例如:
export default (entity: any) => async (req: Request, res: Response, next: Next) => {
const repository = getRepository(entity);
const query = repository.createQueryBuilder(`${entity}`);
// Get query params
for (const propName in req.params) {
if (req.params.hasOwnProperty(propName)) {
query.where(`${propName} = :param`, { param: req.params[propName] });
}
}
// Pagination
const page = parseInt(req.query.page, 10) || 1;
const limit = parseInt(req.query.limit, 10) || 25;
const startIndex = (page - 1) * limit;
const endIndex = page * limit;
const [result, total] = await query
.skip(startIndex)
.take(endIndex)
.getManyAndCount();
res.send({
"success": true,
"data": result,
"count": total,
"message": null
});
next();
};
当我运行中间件时,函数
async validate()
也被触发,但不应该因为我正在获取数据而不是插入或更新它们。
validate
方法被触发,
Typeorm
产生这个错误:
"QueryFailedError: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'is already a license with name of ${this.name}
);\r\n });\r\n }\r\n}
.id
A' at line 12"
validate
,数据从中间件正确返回。
最佳答案
您的中间件似乎在您的查询中使用了以下消息:There is already a license with name of ${this.name}
.如果没有进一步说明您如何将中间件与 restify(server.use 语句)一起使用,则很难说明此错误消息有效负载如何以及为何以您的中间件查询结束,但您应该检查这个方向。
另一方面,如果您需要确保许可证名称的唯一性,您可能需要在 name
上声明一个唯一的 key 。使用以下符号而不是使用手动验证:
@Column({ nullable: false, unique: true })
public name!: string;
请在 typeorm 文档中找到更多信息:
https://github.com/typeorm/typeorm/blob/master/docs/decorator-reference.md#column
关于typescript - 类验证器使用 createQueryBuilder 意外触发验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63337964/
我正在使用 Symfony2,我需要执行此 SQL,例如: select detformacion.* from detformacion left join forma
我试图在 Symfony2.3 中使用查询生成器,但我不断收到错误消息:FatalErrorException:错误:调用成员函数 createQueryBuilder() 在...第 45 行中的非
我正在使用 Typeorm结合 class-validator ,所以我定义了一个这样的实体: import { Entity, PrimaryGeneratedColumn,
在我的存储库类中,我使用: public function getItemsByTag($tag) { $qb = $this->createQueryBuilder('c')
我在执行这个 SQL 请求时遇到了麻烦: SELECT * FROM project LEFT JOIN user ON project.idAuthor=user.id WHERE project.
这很好用 SELECT * FROM podcasttags INNER JOIN podcast ON podcasttags.podcastid = podcast.id INNER JOIN t
我正在使用 Symfony 3.4 并且我在查询时遇到问题: $qb = $this->createQueryBuilder('o') ->leftJoin('o.prices', 'p',
现在我正在尝试通过将内容 ID 与用户 ID 匹配来编写查询返回用户名和内容的代码。这是我的 table 的样子。 我有两个表。 一个是用户表包含username 和userid。 另一个表是内容表,
我一直在尝试创建此 SQL 查询,但第二个参数一直出错。 也许我在这里遗漏了一些东西。 这是我的要求: $pointsTEF = $this->getDoctrine()->getManager();
我有一个实体“交易”,它有一个相关实体“客户”。我想加载与交易相关的客户。 它的工作原理如下: Repository.find({ relations: ['customer'] }); 但是我想做一
我有表实体 - 开发人员和用户。在用户中,我有三个角色 ROLE_DEVELOPER ROLE_FREELANCER 和 ROLE_COMPANY。每个起始用户的所有角色,如果这是用户中的开发人员,则
我在 MySQL 中有这个查询,我想应用到学说中 SELECT * FROM ads_list AS al LEFT JOIN (ads_category AS ac, ads_category_ma
我正在尝试这个 $results = this->get('doctrine')->getManager()->createQueryBuilder() ->select('x.a,
我有一个 itemid 和一个类别 id,它们都是有条件的。如果没有给出,则所有项目都显示为最新的拳头。如果给出了 itemid,则仅显示 id 低于给定 id 的项目(用于分页)。如果给出类别 ID
我有一个“团队”实体,其属性为“预算”。我只想打印团队属性,我希望预算最高的团队出现在第一位、第二位、第三位...(DESC)。 但是使用这段代码,它不起作用,我不明白为什么。 indexAction
你知道我怎样才能从我的 createQueryBuilder 中获取 sql 吗? 我的 Entity/DownloadRepository.php 类: public function getLa
我不知道如何让它工作。 我有: partner 表,包含字段 id 和 name 包含两个字段的 partner_address 表:id_partner 和 id_address 一个表 addre
现在我成功创建了一个函数,使用 Doctrine 的函数 createQueryBuilder 从数据库检索数据。 有人知道是否有类似的函数来插入或更新数据库?或者我如何使用createQueryBu
该代码不起作用。有谁能够帮助我?代码是: class ResultRepository extends EntityRepository { public function findAllB
我正在使用 Doctrine createQueryBuilder() 在 Symfony2 中构造查询。但是,我不想占用该实体中的所有列。如何只选择 ID 和名称? $query = $this->
我是一名优秀的程序员,十分优秀!