基本的 postgres typeorm nestjs 問題(我不知何故找不到可靠的答案):
我有三個示例表:customers、products和orders。對于此示例,訂單只有兩列product和column作為 oneToOne 關系。
現在我想做創建訂單的基本步驟。我有客戶 ID 和產品 ID。我不能把它們放在相應的列嗎?我真的必須先獲取客戶和產品嗎?
@Injectable()
export class OrderService {
constructor(
@InjectRepository(Order)
private readonly orderRepository: Repository<Order>,
@InjectRepository(Customer)
private readonly customerRepository: Repository<Customer>,
@InjectRepository(Product)
private readonly productRepository: Repository<Product>,
) {}
async newOrder(order: OrderDto) {
const [customer, product] = await Promise.all([
this.customerRepository.findOneBy({
id: order.customer,
}),
this.productRepository.findOneBy({
id: order.product,
}),
]);
const newOrder = this.orderRepository.create({
customer,
product,
});
return this.orderRepository.save(newOrder);
}
}
uj5u.com熱心網友回復:
對于此示例,訂單只有兩列 product 和 column 作為 oneToOne 關系
我相信您想說的是, 中的每條記錄orders都有一個鏈接記錄 incustomers和一個鏈接記錄 in products。
TLDR:您不需要查詢表customers或products表。
使您的Order物體類如下所示并手動提供外鍵列。如果您不這樣做,TypeOrm 會為您執行此操作,但列名可能是customer_id, 和product_id.
@Entity('orders')
class Order {
// Here provide the type based on `id` column in `Customer` entity.
@Column({ type: 'varchar'})
customerId: string;
@ManyToOne(() => Customer)
@JoinColumn({ name: 'customerId' })
customer: Customer;
// Here provide the type based on `id` column in `Product` entity.
@Column({ type: 'varchar'})
productId: string;
@ManyToOne(() => Product)
@JoinColumn({ name: 'productId' })
product: Product;
}
然后在您的服務類中,您可以這樣做:
@Injectable()
export class OrderService {
constructor(
@InjectRepository(Order)
private readonly orderRepository: Repository<Order>,
) {}
async newOrder(order: OrderDto) {
const newOrder = this.orderRepository.create({
customerId: order.customer,
productId: order.product,
});
return this.orderRepository.save(newOrder);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/514694.html
