2 votes

Requête TypeORM liée aux valeurs oneToMany dans find()

J'ai la requête SQL suivante que je veux remplacer par un mappage ORM :

SELECT primeid, name 
FROM primes p INNER JOIN seconds s ON s.primeid = p.primeid 
WHERE s.insertdate >= '2020-01-01' and s.insertdate <= '2020-01-31'

J'ai les entités suivantes :

@Entity("primes") 
export class PrimeEntity {
        @PrimaryColumn({name:'primeid'})
        primeId: number;

        @Column()
        name: string;

        @OneToMany('SecondEntity','prime')
        seconds: SecondEntity[];
}

@Entity("seconds") 
export class SecondEntity {
        @PrimaryColumn({name:'secondid'})
        secondId: number;

        @Column({name: 'insertdate'})
        insertDate: Date;

        @ManyToOne('PrimeEntity', 'seconds')
        @JoinColumn('primeid')
        prime: PrimeEntity;
}

Le code suivant devrait retourner presque la même chose que la requête SQL au début :

primeRepository.find({
    relations: ['seconds'],
    where: {
        seconds: {
            insertDate: Between('2020-01-01', '2020-01-31')
        }
    }

});

cela devrait retourner

[
PrimeEntity {primeId: 1, name: 'test', seconds: [SecondEntity {secondId: 1, insertDate: '2020-01-01'}]},
...
] 

Mais au lieu de cela, je reçois le message d'erreur suivant :

EntityColumnNotFound: Aucune colonne d'entité "seconds" n'a été trouvée.

Peut-être que quelqu'un pourrait m'aider...

merci et meilleures salutations Greg

0voto

Hatem Jaber Points 48

J'étais à la recherche de quelque chose dans ce sens où je peux utiliser le référentiel personnalisé que j'ai créé et interroger de manière similaire à votre exemple ci-dessus. J'ai fini par devoir faire quelque chose comme cela à la place:

    primeRepository.createQueryBuilder("prime")
    .innerJoin("prime.seconds", "s")
    .where("s.insertDate >= :startDate and s.insertDate <= :endDate", {startDate: '2020-01-01', endDate: '2020-01-31'})
    .getMany()

L'exemple ci-dessus est quelque chose que j'ai écrit en fonction de votre requête et de ce que j'ai fait pour le faire fonctionner, je ne sais pas si cela fonctionnera tel quel, vous devrez peut-être le ajuster. Je voulais juste aider à vous orienter dans la bonne direction si vous aviez encore besoin d'une solution. J'espère que dans une future version, ils aborderont cela et le rendront plus intuitif.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X