2016-01-28 1 views
2

Я создаю родительский и дочерний экземпляр, используя sequlize, но он вызывает следующую ошибку.Невозможно создать дочерний экземпляр для одного-ко-многим в Sequelize.js

Site.hasMany(Group,{as:'groups'}); 
Group.belongsTo(Site); 

//not working 
Site.create(siteData).then((site)=>{ 
    site.addGroups(groupData).then(()=>{ //also tried addGroup 
    next(); 
    }); 
}); 

//this works 
Site.create(siteData).then((site)=>{ 
groupData.SiteId=site.id; 
Group.create(groupData).then(()=>{ 
    next(); 
}); 
}); 

Ошибка:

Unhandled rejection TypeError: val.replace is not a function at Object.SqlString.escape (c:\APi\node_modules\sequelize\lib\sql-string.js:61:15) at Object.QueryGenerator.escape (c:\APi\node_modules\sequelize\lib\dialects\abstract\query-generator.js:983:22)

+0

Я не уверен, что это необходимо для его работы, но вы попытались создать экземпляр Groupelize Group, а затем запустить группы добавления? var instance = Site.build (groupData) и передать этот экземпляр в addGroups. И как выглядят схемы ваших таблиц для сайта и группы? Как вы писали отношения в продолжении? –

+0

Привет @CameronBillings, только группа работает, даже второй вариант работает, как показано в моем коде выше. Я создал отношение, используя первую две строки, как я показал выше. Однако я удалил некоторый код, который синхронизирует схему, чтобы сохранить код выше простого. Могу ли я узнать, что делает этот Site.build (groupData)? в соответствии с схемой. В таблице «Моя группа» есть SiteId. – CreativeManix

+1

Group.build (groupData) просто вернет экземпляр Sequelize объекта Group с помощью groupData. Таким образом, он будет прикреплять методы Sequelize и такие к экземпляру. Метод addAssociation() может ожидать, что будет содержать экземпляр Sequelize, а не просто простой объект, который «представляет» экземпляр Sequelize.http: //docs.sequelizejs.com/en/latest/docs/instances/ –

ответ

-1

Если у вас есть какой-либо код, как показано ниже добавление пользовательских свойств объекта, вы будете сталкиваться с этой проблемой.

Object.prototype.xxx = function(o) { 
    ... 
} 

Когда Sequelize compose sql, он перебирает все свойства параметра, который будет включать это настраиваемое свойство.

0

Предположим, у вас есть задача и другой график, так что вы можете попробовать что-то вроде этого и вы можете создать большую часть графика или одной задачи, а просто изменить bulkeCreate к create

var ts=req.body.task_time; 


    tasks.create(req.body).then(function (taskvalues) { 

     //for adding taskId with each object to prepare object for bulk 

     for(var i=0;i<ts.length;i++) 

     ts[i].taskId = taskvalues.id; 

     taskschedule.bulkCreate(ts,{ individualHooks: true }).then(function (allschedule) { 

      res.status(200).json({"message":"Post saved successfully"}); 

     }).catch(function (err) { 
      res.status(500).json(err) 
     }).catch(function (err) { 
      res.status(500).json(err); 

     }) 

    }) 

Ваш JSON для taskschedule и любое значение, установленное для задачи в почтовом теле

"task_time": [ 
    { 
    "shift": "m", 
    "date": "01/23/2017", 
    "start_time": "2017-01-22 19:00:00", 
    "end_time": "2017-01-23 19:00:00", 
     "status":"2", 
     "user_id":"12" 
    }, 

    { 
    "shift": "m", 
    "date": "01/23/2017", 
    "start_time": "2017-01-22 19:00:00", 
    "end_time": "2017-01-23 19:00:00", 
     "status":"2", 
     "user_id":"12" 
    } 

], 
Смежные вопросы