我不想创建一个用于将关系加载到其中的属性(如所有示例所示)。我唯一需要做的就是拥有一个显式外键属性,以便 migration 能够在数据库中为其创建适当的约束。与我需要的装饰器最接近的装饰器是@RelationId,但它仍然需要存在关系类的属性。
为清楚起见,我们以文档中的示例为例:
@Entity()
export class Post {
@ManyToOne(type => Category)
category: Category;
@RelationId((post: Post) => post.category) // it still requires the presence of the `category` proeprty
categoryId: number;
}
我在这里不需要category
属性。我想拥有categoryId
属性,并将其标记为Category.Id
的外键。它应该看起来像这样:
@Entity()
export class Post {
@ForeignKey((category: Category) => category.Id) // it's a foreign key to Category.Id
categoryId: number;
}
有可能吗?
答案 0 :(得分:1)
也许您可以创建和编写自己的迁移并像这样使用它:
--The main CMakeLists.txt is as below:
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(PCAP_LIBRARY /home/rsidhan1/Downloads/libpcap-1.9.1/libpcap.so.1.9.1) // this file was created after building for ARM
Project(Testing C CXX)
include_directories(/home/rsidhan1/Downloads/libpcap-1.9.1/)
set(PROJECTS eth_read)
foreach(PROJECT ${PROJECTS})
add_subdirectory(src/${PROJECT})
endforeach()
--The sub CMakeLists.txt is as below:
project(eth_read C CXX)
set(PUBLIC_DOCS
README.md
)
set(SOURCES
main.cpp
)
target_link_libraries(eth_read /home/rsidhan1/Downloads/libpcap-1.9.1/)
该代码段是从orm类型的functional test中提取的,您可以使用它在我认为的数据库上创建自己的约束。
答案 1 :(得分:1)
检查这两个地方Auth module(JwtModule.register())和JWT strategy(super({...}))。确保您将秘密 /secretOrKey 设置为相同的密钥。就我而言,“秘密:process.env.JWT_SECRET_KEY”和“secretOrKey:process.env.JWT_SECRET_KEY”
答案 2 :(得分:0)
“我需要的是拥有显式外键属性” ...
不,您不能。使用@ManyToOne装饰器时,TypeOrm将自动创建外键属性。只需将@ManyToOne和@JoinColumn装饰器组合在一起,就像这样:
@ManyToOne(type => Category)
@JoinColumn({ name: 'custom_field_name_if_you_want' })
category: Category;
答案 3 :(得分:0)
实际上有可能这样做:
@Entity()
export class Post {
// this will add categoryId
@ManyToOne(type => Category)
category: Category;
// and you can use this for accessing post.categoryId
// only column you mark with @Column decorator will be mapped to a database column
// Ref: https://typeorm.io/#/entities
categoryId: number;
}
添加的categoryId
不会映射到列,然后将用于显式设置id或访问其值,如下所示:
post.categoryId = 1;
// or
const id = post.categoryId
答案 4 :(得分:0)
我最近遇到了同样的问题。 我仍然使用实体,但仅使用引用实体的主键值。
即我不会在数据库中查询所引用的实体。
假设您的类别实体如下所示:
@Entity()
export class Category{
@PrimaryGeneratedColumn()
id: number;
// ... other stuff
}
现在以您的代码为例。 直接使用外键值分配关系就像这样。
// You wish to assign category #12 to a certain post
post.category = { id: 12 } as Category