簡體   English   中英

Sequelize associations (join) 錯誤:錯誤:未知列

[英]Sequelize associations (join) erorr: Error: Unknown column

我有 2 個簡單的表:

table: wp_posts 
PK ID
post_title

table: wp_postmeta 
PK post_id
meta_key
meta_value

運行這段代碼:

wp_posts.hasMany(wp_postmeta , { foreignKey: "post_id" });
wp_postmeta.belongsTo(wp_posts , { foreignKey: "ID" });

wpPostsData = await wp_posts .findAll({
      include: [wp_postmeta ]
    });

生成以下內容(我可以在終端中看到):

Executing (default): SELECT `wp_posts`.`ID`, `wp_posts`.`post_author`, `wp_posts`.`post_title`, `wp_postmeta`.`post_id` AS `wp_postmeta.post_id`, `wp_postmeta`.`meta_key` AS `wp_postmeta.meta_key`, `wp_postmeta`.`meta_value` AS `wp_postmeta.meta_value`, `wp_postmeta`.`ID` AS `wp_postmeta.ID` FROM `wp_posts` AS `wp_posts` LEFT OUTER JOIN `wp_postmeta` AS `wp_postmeta` ON `wp_posts`.`ID` = `wp_postmeta`.`post_id` WHERE `wp_posts`.`post_type` = 'product';

以這個錯誤結束:

parent: Error: Unknown column 'wp_postmeta.ID' in 'fie…    at Packet.asError (c:\Users\yonatan\OneD…, original: Error: Unknown column 'wp_postmeta.ID' in 'fi…   at Packet.asError (c:\Users\yonatan\OneD…, sql: 'SELECT `wp_posts`.`ID`, `wp_posts`.`post_autho…_id` WHERE `wp_posts`.`post_type` = 'product';', parameters: {…}, …}

為什么wp_postmeta.ID在 select 語句中使用 wp_postmeta.ID? 它在使用wp_postmeta.post_idjoin部分中正確處理。 那么為什么要在它后面混合表格字段呢?

您需要在兩個配對關聯 (hasMany/belongsTo) 中指示相同的外鍵列,因為實際上您只有一個外鍵列(在wp_postmeta中)而wp_posts中的另一列是 PK(默認情況下)。

wp_posts.hasMany(wp_postmeta , { foreignKey: "post_id" });
wp_postmeta.belongsTo(wp_posts , { foreignKey: "post_id" });

不需要在關聯中指示 1:N 關系的 1 個邊表中的列,因為通常它是 PK 列。 如果您想使用其他列而不是具有唯一約束/索引的 PK,那么您還需要在sourceKey選項的兩個關聯中指明它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM