async findAllByUser(id: number) {
return this.createQueryBuilder('movie')
.setParameter('userId', id)
.leftJoinAndSelect(
'movie.userDetails',
'userDetails',
`movie.id = userDetails.movieId AND userDetails.userId = :userId`,
)
.getMany();
}
async findAllByUser(id: number) {
return this.find({
relations: ['userDetails'],
join: {
alias: 'movies',
leftJoinAndSelect: { userDetails: 'movies.userDetails' },
},
where: (qb) => {
qb.where('userDetails.userId = :userId', { userId: id });
},
});
}
async findAllByUser(id: number) {
return this.createQueryBuilder('movie')
.leftJoinAndSelect('movie.userDetails', 'userDetails')
.where(`movie.id = userDetails.movieId`)
.andWhere('userDetails.userId = :userId', { userId: id })
.getMany();
}
const useSendMessage = (): ((
id: number,
message: Message,
) => void) => {
const dispatch = useDispatch();
return useCallback(
(id, message) => {
dispatch(Operation.sendMessage(id, message));
},
[dispatch],
);
};
норм работает с createQueryBuilder, но если убрать `movie.id = userDetails.movieId AND userDetails.userId = :userId`, и добавить вместо этого .where с этим же условием, то будет работать как find, который я выше кидал.
Я вообще не очень понимаю, связи есть, тип join одинаковый, но find или createQueryBuilder (с where) не будет выдавать фильмы с userDetails = null, а вот если в leftJoinAndSelect условие напрямую указать - то будет.