typeorm/typeorm

VirtualColumn throws error when used in WHERE conditions

Open

#11,616 opened on 2025年8月21日

GitHub で見る
 (3 comments) (0 reactions) (0 assignees)TypeScript (36,093 stars) (6,466 forks)batch import
good first issue

説明

Issue description

Error when using VirtualColumn in a WHERE clause with createQueryBuilder

Expected Behavior

The query should expand the VirtualColumn definition and generate SQL similar to:

SELECT 
       `user`.`id` AS `user_id`, 
       `user`.`firstName` AS "user_firstName",
       `user`.`lastName` AS "user_lastName"
       CONCAT(`user`.`first_name`, ' ', `user`.`last_name`) AS `user_fullName` 
FROM "user" "user"
LEFT JOIN `users` `user` ON `user`.`id`=`member`.`user_id` 
    AND (`user`.`deleted_at` IS NULL) 
WHERE CONCAT("user"."firstName", ' ', "user"."lastName") = 'John Doe';

Actual Behavior

SELECT 
       `user`.`id` AS `user_id`, 
       `user`.`firstName` AS "user_firstName",
       `user`.`lastName` AS "user_lastName"
       CONCAT(`user`.`first_name`, ' ', `user`.`last_name`) AS `user_fullName` 
FROM `circle_members` `member` 
LEFT JOIN `users` `user` ON `user`.`id`=`member`.`user_id` 
    AND (`user`.`deleted_at` IS NULL) 
WHERE `user`.`fullName` = 'John Doe';

"Unknown column 'user.fullName' in 'where clause'"

Steps to reproduce

User Entity

import { Entity, PrimaryGeneratedColumn, Column, VirtualColumn } from "typeorm";

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  firstName: string;

  @Column()
  lastName: string;

  ...

  @VirtualColumn({
    query: (alias) => `CONCAT(${alias}.firstName, ' ', ${alias}.lastName)`
  })
  fullName: string;
}

CircleMember Entity

@Entity('circle_members')
export class CircleMember {
  @PrimaryGeneratedColumn({ name: 'id' })
  id: number;

  @Column({ name: 'user_id' })
  userId: number;
 ...
}

QueryBuilder

const query = this.dataSource
      .getRepository(CircleMember)
      .createQueryBuilder('member')
      .select(['user.id', 'user.firstName' , 'user.lastName' ,'user.fullName'])
      .leftJoin('member.user', 'user')

if (search) {
      query.andWhere(`user.fullName = :search`, {
        search: 'John Doe',
      });
    }

My Environment

| Dependency | Version | | Operating System | MacOS | | Node.js version |22.16.0 | | Typescript version | 5.8.3 | | TypeORM version | 0.3.26 |

Additional Context

Allow VirtualColumn definitions to be expanded anywhere in QueryBuilder, not just in SELECT clauses.

Relevant Database Driver(s)

  • aurora-mysql
  • aurora-postgres
  • better-sqlite3
  • cockroachdb
  • cordova
  • expo
  • mongodb
  • mysql
  • nativescript
  • oracle
  • postgres
  • react-native
  • sap
  • spanner
  • sqlite
  • sqlite-abstract
  • sqljs
  • sqlserver

Are you willing to resolve this issue by submitting a Pull Request?

No, I don’t have the time and I’m okay to wait for the community / maintainers to resolve this issue.

コントリビューターガイド