ค้นหาเว็บไซต์

mysql - วิธีตั้งค่าการตรวจสอบแบบบูลีนใน typeorm และ nest.js


ฉันพัฒนาแอปด้วย nest.js และ typeorm เอนทิตีถูกตรวจสอบความถูกต้องดังนี้

ฉันมีคำถามบางอย่างเกี่ยวกับการตรวจสอบความถูกต้องของ boolean

event.dto.ts
export class EventRequest {
    @IsInt()  
    id: number;
    
    @IsInt()
    userId: number;
    
    @IsString()
    title: string;
      
    @IsDateString()
    date: Date;
    
    @IsBoolean()
    islastDate: boolean;
event.entity.ts
 @Entity('events')
  export class Event extends BaseEntity {
    @PrimaryGeneratedColumn('increment', { type: 'int' })
    id: number;
  
    @ManyToOne(type => User, user => user.events)
    @JoinColumn()
    readonly user?: User;
    userId: User;

    @Column('varchar')
    title: string;
  
    @Column('date')
    date: Date;
  
    @Column('bool')
    isLastdate: boolean;

ฉันส่งคำขอต่อไปนี้ไปยังเซิร์ฟเวอร์

{
"id":0,
"userId":1,
"title":"mytest",
"date":"2011-10-05T14:48:00.000Z",
"isLastdate":0,
"beginTime":"2011-10-05T14:48:00.000Z",
"endTime":"2011-10-05T14:48:00.000Z",
"place":"Tokyo",
"labelCd":1,
"detail":"test"
}

ข้อผิดพลาดต่อไปนี้ถูกส่งกลับ ควรตั้งค่าเป็นค่าประเภท boolean อย่างไร?

{
    "statusCode": 400,
    "message": [
        "islastDate must be a boolean value"
    ],
    "error": "Bad Request"
}

นี่คือ DB ของฉันที่สร้างขึ้นจากเอนทิตีด้านบน

mysql> desc events;
+------------+--------------+------+-----+----------------------+----------------+
| Field      | Type         | Null | Key | Default              | Extra          |
+------------+--------------+------+-----+----------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL                 | auto_increment |
| title      | varchar(255) | NO   |     | NULL                 |                |
| date       | date         | NO   |     | NULL                 |                |
| place      | varchar(255) | NO   |     | NULL                 |                |
| detail     | varchar(255) | NO   |     | NULL                 |                |
| createdAt  | datetime(6)  | NO   |     | CURRENT_TIMESTAMP(6) |                |
| updatedAt  | datetime(6)  | NO   |     | CURRENT_TIMESTAMP(6) |                |
| deletedAt  | datetime(6)  | YES  |     | NULL                 |                |
| beginTime  | time         | NO   |     | NULL                 |                |
| endTime    | time         | NO   |     | NULL                 |                |
| labelCd    | int(11)      | NO   |     | NULL                 |                |
| userId     | int(11)      | YES  | MUL | NULL                 |                |
| isLastdate | tinyint(4)   | NO   |     | NULL                 |                |
+------------+--------------+------+-----+----------------------+----------------+

ฉันเข้าใจผิดอะไรหรือเปล่า?

ค่าบูลีนคืออะไร?

ขอบคุณ

คำตอบ #1

มีการพิมพ์ผิดในข้อมูลคำขอของคุณ คุณมี islastDate: boolean; ใน DTO ของคุณ และ isLastdate: boolean; ในไฟล์ entity ของคุณ เปลี่ยนอันหนึ่งให้ตรงกับอีกอัน และคุณน่าจะใช้ได้

คำตอบ #2

ผมก็พยายามจะอัปเดตค่า boolean หนึ่งในเอนทิตี้ของผม แต่คิวรีที่สร้างโดย TypeORM มักจะส่ง 0 ไม่ว่าผมจะส่งค่า true หรือ false การเปลี่ยนวิธีจาก PUT เป็น POST ใช้ได้ผลกับผม นอกจากนี้ผมยังส่งพารามิเตอร์โดยการสร้าง Dto ของพารามิเตอร์เหล่านั้นก่อน คือการสร้าง type สำหรับพารามิเตอร์