2017-09-26 28 views
0

在設置與Sequelize庫的關聯時遇到了一些麻煩。繼續收到SequelizeEagerLoadingError:客戶端未與許可證關聯!Sequizeize協會的問題,

這是我的兩個模型。

'use strict'; 
 

 
module.exports = (sequelize, DataTypes) => { 
 
    const License = sequelize.define('License', { 
 
    id: { 
 
     type: DataTypes.UUID, 
 
     defaultValue: DataTypes.UUIDV4, 
 
     primaryKey: true, 
 
     validate: { isUUID: 4 } 
 
    }, 
 
    client_id: { 
 
     type: DataTypes.UUID, 
 
     validate: { isUUID: 4 } 
 
    } 
 
    }, { 
 
    classMethods: { 
 
     associate: function (models) { 
 
     License.belongsTo(models.Client, { foriegnKey: 'client_id' }); 
 
     } 
 
    } 
 
    }); 
 
    return License; 
 
};

'use strict'; 
 

 
module.exports = (sequelize, DataTypes) => { 
 
    const Client = sequelize.define('Client', { 
 
    id: { 
 
     type: DataTypes.UUID, 
 
     defaultValue: DataTypes.UUIDV4, 
 
     primaryKey: true 
 
    }, 
 
    name: { type: DataTypes.STRING } 
 
    }, { 
 
    classMethods: { 
 
     associate: function (models) { 
 
     Client.hasOne(models.License); 
 
     Client.hasMany(models.Event); 
 
     Client.hasMany(models.Clips); 
 
     } 
 
    } 
 
    }); 
 
    return Client; 
 
};

這裏是控制器我已經安裝了,我知道該模型是否正常工作,因爲我與工作的findbyID()函數的測試。

'use strict'; 
 

 
const db = require('../models/index.js'); 
 

 
class Controller { 
 
    constructor(router) { 
 
     router.get('/:id', (req, res, next) => { 
 

 
      // db.License.findById(req.params.id).then(function(license) { 
 
      //  res.status(200).json(license); 
 
      // }, function(err) { 
 
      //  res.status(404).json({ 
 
      //   error: 'License does not exist!' 
 
      //  }); 
 
      // }); 
 
      db.License.findAll({ 
 
       include: [{ model: db.Client }] 
 
      }) 
 
      .then(function(license) { 
 
       res.status(200).json(license); 
 
      }, function(err) { 
 
       console.log(err); 
 
       res.status(404).json({ 
 
        error: 'License does not exist!' 
 
       }); 
 
      }); 
 
     }); 
 
    } 
 
} 
 

 
module.exports = router => new Controller(router);

幫助將是巨大的感覺超級失落。 sequelize.sync()正在運行,不會引發任何錯誤。試圖弄清楚我是否有命名問題,可能是因爲某些事情需要大寫或不是大寫,事實並非如此。

+0

剛剛意識到我有我的模式設置沒有按」的方式t與續集的V4一起工作,所以沒有任何東西可以相互關聯。我正在使用從sequelize cli遷移中看不到的默認格式。 –

+0

你解決了嗎?您正在重新定義模型上的外鍵。首先,你在許可證上執行belongsTo,然後在客戶端上執行一個。 belongsTo在origen模型上創建關鍵字並在目標模型上創建一個關鍵字,除了在belongsTo選項上使用'as'外,因此當您執行include時,sequelize會知道您要引用哪個關鍵字。 – Ellebkey

+0

是的,我發現我應該關閉這個問題。由於用於爲續集V4中的模型定義實例和類方法的新格式,我的任何關聯都沒有建立。而且由於我正在運行遷移來控制我的數據庫和列名,我還必須回去編輯它們以符合sequqlize正在查找的內容。 client_id => ClientId –

回答

1

我也在Sequelize v4 +中遇到這種錯誤。我修改我的模型有一些小的改變,希望能爲你工作。 寫許可模式是這樣

'use strict'; 
 

 
module.exports = function (sequelize, DataTypes) { 
 
    const License = sequelize.define('License', { 
 
     id: { 
 
      type: DataTypes.UUID, 
 
      defaultValue: DataTypes.UUIDV4, 
 
      primaryKey: true, 
 
      validate: {isUUID: 4} 
 
     }, 
 
     client_id: { 
 
      type: DataTypes.UUID, 
 
      validate: {isUUID: 4} 
 
     } 
 
    }); 
 
    License.associate = function (models) { 
 
     License.belongsTo(models.Client, {foriegnKey: 'client_id'}); 
 
    }; 
 
    return License; 
 
};

相同修改您的客戶像這樣,

'use strict'; 
 

 
module.exports = function (sequelize, DataTypes) { 
 
    const Client = sequelize.define('Client', { 
 
     id: { 
 
      type: DataTypes.UUID, 
 
      defaultValue: DataTypes.UUIDV4, 
 
      primaryKey: true 
 
     }, 
 
     name: {type: DataTypes.STRING} 
 
    }); 
 
    Client.associate = function (models) { 
 
     Client.hasOne(models.License); 
 
     Client.hasMany(models.Event); 
 
     Client.hasMany(models.Clips); 
 
    }; 
 

 
    return Client; 
 
};