2017-04-17 11 views
1

ショッピングカート管理システムでは、 ユーザーには複数の注文と注文があります。ユーザーには、この場合userID(PKの 'User' Table)は 'Order'テーブルのFKです。 これを試しましたが、注文がユーザーに関連付けられていないという関連付けエラーが発生します。ここでsequelizeアソシエーション - 注文はユーザーに関連付けられていません

db.user.findAll({ 
    include: [ 
     { 
     model: db.order 
     } 
    ] 
    }) 
    .then(users => { 
     res.json(users) 
    }); 

モデルは以下のとおりです。 -

注文: -

'use strict'; 
var db = require('../models/index'); 

module.exports = function (sequelize, DataTypes) { 
    var order = sequelize.define('order', { 
    id: { 
     type: DataTypes.INTEGER, 
     allowNull: false, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    userId: { 
     type: DataTypes.INTEGER, 
     allowNull: false 
    }, 
    totalAmount: { 
     type: DataTypes.INTEGER, 
     allowNull: false 
    } 
    , 
    createdAt: { 
     type: DataTypes.DATE, 
     allowNull: true 
    }, 
    updatedAt: { 
     type: DataTypes.DATE, 
     allowNull: true 
    } 
    }, { 
     classMethods: { 
     associate: function (models) { 
      order.belongsTo(models.user); 
      order.belongsToMany(models.products, { through: { model: models.orderProduct } }); 
      // order.hasMany(models.orderProduct); 
     } 
     } 
    }); 
    return order; 
}; 

ユーザー: -

'use strict'; 
var db = require('../models/index'); 

module.exports = function (sequelize, DataTypes) { 

    var user = sequelize.define('user', { 
    id: { 
     type: DataTypes.INTEGER(11), 
     allowNull: false, 
     primaryKey: true, 
     autoIncrement: true 
    }, 
    name: { 
     type: DataTypes.STRING(255), 
     allowNull: false 
    }, 
    email: { 
     type: DataTypes.STRING(255), 
     allowNull: false 
    }, 
    password: { 
     type: DataTypes.STRING(255), 
     allowNull: false 
    }, 
    address: { 
     type: DataTypes.STRING(255), 
     allowNull: true 
    }, 
    contact: { 
     type: DataTypes.STRING(255), 
     allowNull: true 
    }, 
    type: { 
     type: DataTypes.STRING(255), 
     allowNull: true 
    }, 
    createdAt: { 
     type: DataTypes.DATE, 
     allowNull: true 
    }, 
    updatedAt: { 
     type: DataTypes.DATE, 
     allowNull: true 
    }, 
    }, { 
     activated: { 
     type: DataTypes.BOOLEAN, 
     allowNull: true 
     } 
    }, { 
     classMethods: { 
     associate: function (models) { 
      user.hasMany(models.order); 
     } 
     } 
    }); 
    return user; 
}; 
ここ

は誤りである: -

Unhandled rejection Error: order is not associated to user! 
    at Model.validateIncludedElement (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:558:11) 
    at F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:440:29 
    at Array.map (native) 
    at Model.validateIncludedElements (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:436:37) 
    at Model.<anonymous> (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\sequelize\lib\model.js:1372:32) 
    at Model.tryCatcher (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\util.js:16:23) 
    at Promise._settlePromiseFromHandler (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:512:31) 
    at Promise._settlePromise (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:569:18) 
    at Promise._settlePromise0 (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:614:10) 
    at Promise._settlePromises (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\promise.js:693:18) 
    at Async._drainQueue (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\async.js:133:16) 
    at Async._drainQueues (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\async.js:143:10) 
    at Immediate.Async.drainQueues (F:\UNI\BSCS -VII\IAD\WebProjects\Project\SERVER\node_modules\bluebird\js\release\async.js:17:14) 
    at runCallback (timers.js:666:20) 
    at tryOnImmediate (timers.js:639:5) 
    at processImmediate [as _immediateCallback] (timers.js:611:5) 

答えて

1

外部キーを指定します。使用しているキーは自動的には推測されません。

編集:あなたの投稿を再チェックしました。あなたのユーザーは間違った方法で定義されています。あなたの最後のフィールド "活性化"は外にあり、前のオブジェクトを閉じます。だからあなたの協会を読んでいないのです。

updatedAt: { 
     type: DataTypes.DATE, 
     allowNull: true 
    }, 
    }, { 
     activated: { 
     type: DataTypes.BOOLEAN, 
     allowNull: true 
     } 
    }, { 
     classMethods: { 
     associate: function (models) { 
      user.hasMany(models.order); 
     } 
     } 
    }); 

は次のようになります。

 updatedAt: { 
      type: DataTypes.DATE, 
      allowNull: true 
     }, 
     activated: { 
      type: DataTypes.BOOLEAN, 
      allowNull: true 
      } 
     }, { 
      classMethods: { 
      associate: function (models) { 
       user.hasMany(models.order); 
      } 
      } 
     }); 
+0

まだ働いていない –

+0

は私の編集を確認してください。あなたは定義構造にエラーがあります – yBrodsky

+1

ありがとう、あなたは人生保護人です:) –

0

これを試してみてください。

order.belongsTo(models.user, {as : 'User'}); 

user.hasMany(models.order, {as : 'Orders'}); 

をそして照会ながら:このようなあなたの関連付けを変更し

db.user.findAll({ 
include: [{model: db.order, as: 'Orders'}] 
}) 
.then(users => { 
    res.json(users) 
}); 
+0

問題は私のuser.js(活性化された属性)にありました。 –

関連する問題