sequelizeからfindメソッドを用いても、主キーだけ抽出することができません。
多対多の中間テーブルで、詳細は以下のようになっております。
mysql
1mysql> SELECT * FROM `database_development`.`UserItems`; 2+----+--------+--------+-------+---------------------+---------------------+ 3| id | userId | itemId | isSet | createdAt | updatedAt | 4+----+--------+--------+-------+---------------------+---------------------+ 5| 1 | 1 | 1 | 1 | 2021-07-15 13:21:56 | 2021-07-15 13:21:56 | 6| 2 | 1 | 2 | 0 | 2021-07-15 13:21:56 | 2021-07-15 13:21:56 | 7| 3 | 1 | 2 | 0 | 2021-07-15 13:21:56 | 2021-07-15 13:21:56 | 8| 4 | 1 | 3 | 1 | 2021-07-15 13:21:56 | 2021-07-15 13:21:56 | 9| 5 | 1 | 1 | 0 | 2021-07-15 13:21:56 | 2021-07-15 13:21:56 | 10| 6 | 2 | 2 | 1 | 2021-07-15 13:21:56 | 2021-07-15 13:21:56 | 11| 7 | 2 | 3 | 1 | 2021-07-15 13:21:56 | 2021-07-15 13:21:56 | 12+----+--------+--------+-------+---------------------+---------------------+
ルーティングファイルにて上記データベースへのfindAllを行ったところ、
js
1router.get('/sell', (req, res, next) => { 2 if (check(req, res)){ return }; 3 db.UserItem.findAll({ 4 where: { 5 userId: req.session.login.id 6 }, 7 include: [{ 8 model: db.Item, 9 required: true 10 }] 11 }).then(itms => { 12 console.log(itms);
console
1[ 2 UserItem { 3 dataValues: { 4 userId: 1, 5 itemId: 1, 6 isSet: true, 7 createdAt: 2021-07-15T13:21:30.000Z, 8 updatedAt: 2021-07-15T13:21:30.000Z, 9 Item: [Item] 10 }, 11....略....
となり、idのみ抽出することができませんでした。一方で、本プロジェクトのUserモデルにおいてはfindによって主キーを含めたレコード全体の抽出ができています。
懸念点としては、このUserItemモデルのidをpkとして後から追加したことで、それがどこかで影響しているのではないか、と考えています。
追加の実施については、マイグレーションファイルにidの項目を付け加え、マイグレーションし直し、seedを与えることで実現しました。
js
1// migration file 2'use strict'; 3module.exports = { 4 up: async (queryInterface, Sequelize) => { 5 await queryInterface.createTable('UserItems', { 6 id: { 7 allowNull: false, 8 autoIncrement: true, 9 primaryKey: true, 10 type: Sequelize.INTEGER 11 }, 12 userId: { 13 allowNull: false, 14 type: Sequelize.INTEGER 15 }, 16 itemId: { 17 allowNull: false, 18 type: Sequelize.INTEGER 19 }, 20 isSet: { 21 allowNull: false, 22 type: Sequelize.BOOLEAN 23 }, 24 createdAt: { 25 allowNull: false, 26 type: Sequelize.DATE 27 }, 28 updatedAt: { 29 allowNull: false, 30 type: Sequelize.DATE 31 } 32 }); 33 }, 34 down: async (queryInterface, Sequelize) => { 35 await queryInterface.dropTable('UserItems'); 36 } 37};
また中間テーブルUserItemのモデル定義についても以下に記載させていただきます。
js
1'use strict'; 2const { 3 Model 4} = require('sequelize'); 5module.exports = (sequelize, DataTypes) => { 6 class UserItem extends Model {}; 7 UserItem.init({ 8 userId: DataTypes.INTEGER, 9 itemId: DataTypes.INTEGER, 10 isSet: DataTypes.BOOLEAN 11 }, { 12 sequelize, 13 modelName: 'UserItem', 14 }); 15 UserItem.associate = function(models) { 16 UserItem.belongsTo(models.User, { foreignKey: 'userId' }); 17 UserItem.belongsTo(models.Item, { foreignKey: 'itemId' }); 18 }; 19 return UserItem; 20};
初心者質問で恐縮ですが、何卒お力添えいただけますと幸いです。よろしくお願い申し上げます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。