I have this Entity
@Entity({ name: 'orders' })
export class Order {
...
@ManyToOne(() => BulkOrder, (bulkOrder) => bulkOrder.orders)
bulkOrder?: BulkOrder
}
I'm trying to set the relation to null during an update
.createQueryBuilder()
.update(Order)
.set({ status: OrderStatus.OPEN, bulkOrder: undefined }).
where(...).execute()
but it's not updating the bulkOrder field, as evidenced in the query that it produces
query: UPDATE "orders" SET "status" = $1, "updated_at" = CURRENT_TIMESTAMP WHERE ("id" IN ($2, $3) ...
How can I set the relation to null? I know I could set it to null and save the entity but I need to use a query builder because I have to make sure to not update unwanted registries
From the database standpoint, relation is just a foreign key referencing a primary key. In your case, typeorm under the hood is creating a bulkOrderId
column in orders
table, referencing the id
column from the table corresponding to the BulkOrder
entity.
In order to remove the relation, you have to set the bulkOrderId
column to null. One of the proper ways to do this would be:
@Entity({ name: 'orders' })
export class Order {
...
@ManyToOne(() => BulkOrder, (bulkOrder) => bulkOrder.orders)
@JoinColumn({ name: 'bulkOrderId' })
bulkOrder?: BulkOrder;
@Column({ name: 'bulkOrderId' })
bulkOrderId?: string;
}
.createQueryBuilder()
.update(Order)
.set({ status: OrderStatus.OPEN, bulkOrderId: null }).
where(...).execute()