Jam*_* L. 7 javascript typeorm
我努力了
let modelClass = (await import('@models/' + modelName + '.ts'))[modelName];
let keys = Object.keys(modelClass);//no column names included, only custom helper vars i.e. NoteColumnVarcharLength
let keys = Object.keys(new modelClass());//nothing at all in this model
Run Code Online (Sandbox Code Playgroud)
库中有一个辅助函数可以自动获取它们吗?
小智 5
正如该库存储库问题中所建议的(链接)可以通过使用来解决
connection.getMetadata("User").columns
Run Code Online (Sandbox Code Playgroud)
接受的答案看起来不完整,当我尝试应用答案时,我的脑海中出现了许多问题。所以我自己写一下来很好地解决这个问题。
我们必须首先检索EntityMetadata以获取列名称。我们可以从Connection检索EntityMetadata,我们可以通过任何舒适的方式获取它。
import { getConnection, getManager } from 'typeorm';
const connection1 = getConnection();
const connection2 = getManager().connection;
Run Code Online (Sandbox Code Playgroud)
接下来,我们需要检索实体元数据。
我们可以通过
const metadata = connection.getMetadata(modelClass);
Run Code Online (Sandbox Code Playgroud)
在实体元数据中,您可以使用多个选项来查找列。如果需要查找所有列,则需要使用columns. 如果您只想查看用户定义的列,则可以使用ownColumns.
这些属性包含带有ColumnMetadata.
如果您只需要用户定义列的列表,则可以只返回 的映射值propertyName。
const columns = metadata.columns.map((column) => column.propertyName);
Run Code Online (Sandbox Code Playgroud)
就我而言,我需要通过属性名称查找数据库列名称。
我find()在我的案例中使用了一种方法。
const column = metadata.ownColumns.find((column) => column.propertyName === propertyName);
Run Code Online (Sandbox Code Playgroud)
如果我需要找到几列,我会在propertyName和之间创建一个映射databaseName;
const columnMap = Object.fromEntries(
metadata.ownColumns((column) => ([column.propertyName, column.databaseName]))
);
Run Code Online (Sandbox Code Playgroud)