Search code examples
nestjstypeorm

How to write where condition, for date less than or equal to some value, in nest.js TypeORM?


I am using nest.js and TypeORM. I need to make a query that returns all the rows from a table, where facility_id equals some value, and date is less than or equal to (<=) some date value.

I read the documentation about nest.js, and I couldn't find a proper way to do it.

Also, I read the official GitHub documentation for typeORM.

Here is my code. It would be great if it could be done with find method from EntityRepository

import { DeleteResult, EntityRepository, Repository, UpdateResult } from "typeorm";
import { Reservations} from "src/Entities/reservations.entity";
import { Facility} from "src/Entities/facility.entity";
import { PaginationParams } from "src/pagination.model";
import { LessThanOrEqual } from "typeorm";



@EntityRepository(Reservation)
export class ReservationRepository extends Repository<Reservation> {

    
    
    async findByFacility(ustanovaId, paginationParams, dateParams): Promise<Reservation[]> {

        return await this.find({where: { termin: LessThanOrEqual(new Date(2021, 0, 1))},
             relations: ["users", "facility"],
             take: paginationParams.limit,
             skip: paginationParams.offset,
             order: {
                 [paginationParams.orderby]: paginationParams.order.toUpperCase()
             }});
    }


}

Solution

  • Since you haven't given the proper information about Reservation and Facility entities, I am guessing two possible scenarios (usually both the scenarios will be true). You can select the code solution from either.

    1. Reservation entity has a facility_id column

    const facilityId = "YourFacilityID";
    
    return this.find({
      where: {
        termin: LessThanOrEqual(new Date(2021, 0, 1)),
        facility_id: facilityId
      },
      relations: ["users", "facility"],
      take: paginationParams.limit,
      skip: paginationParams.offset,
      order: {
        [paginationParams.orderby]: paginationParams.order.toUpperCase()
      }
    });
    

    2. Reservation entity has facility reference

    Reservation entity has an OneToOne or ManyToOne relationship with Facility entity where the relationship is named facility and Facility entity has id which is equal to facility_id you explained in the question.

    const facilityId = "YourFacilityID";
    
    return this.find({
      where: {
        termin: LessThanOrEqual(new Date(2021, 0, 1)),
        facility: { id: facilityId }
      },
      relations: ["users", "facility"],
      take: paginationParams.limit,
      skip: paginationParams.offset,
      order: {
        [paginationParams.orderby]: paginationParams.order.toUpperCase()
      }
    });
    

    Hope this helps. Cheers! 🍻