2017-01-18 1 views
0

J'ai actuellement deux collections, qui sont Schools et Contacts. La collection Schools a déjà été remplie avec des milliers de données tandis que Contacts est une nouvelle collection qui est toujours vide.Voiles de créer des données dans plusieurs à plusieurs relation

Maintenant, il y a un changement de schéma pour les deux. Voici le détail du schéma:

// ----------- Schools.js 
module.exports = { 
    attributes: { 
    user: { 
     model: 'users' 
     // Của User đã tạo 
    }, 

    essential: { 
     type: 'string' 
     // Lưu toàn bộ thông tin của essential 
    }, 

    contacts: { 
     collection: 'contacts', 
     via: 'schools' 
    }, 

    pipeline: { 
     type: 'string', 
     defaultTo: "" 
    }, 

    status: { 
     type: 'integer', 
     defaultsTo: 1 
     // 0: un-active, 1: active 
    } 
    } 
}; 

// ----------- Contacts.js 

module.exports = { 
    attributes: { 
     title: { 
      type: 'string' 
     }, 

     firstName: { 
      type: 'string' 
     }, 

     lastName: { 
      type: 'string' 
     }, 

     email: { 
      type: 'string' 
     }, 

     position: { 
      type: 'string' 
     }, 

     landlinePhone: { 
      type: 'string' 
     }, 

     mobilePhone: { 
      type: 'string' 
     }, 

     externalCompany: { 
      type: 'string' 
     }, 

     schools : { 
      collection: 'schools', 
      via: 'contacts', 
      dominant: true 
     }, 

     user: { 
      model: 'users' 
     }, 

     activities: { 
      collection: 'activities', 
      via: 'contact' 
     }, 

     status: { 
      type: 'integer', 
      defaultsTo: 1 
      // 0: remove, 1: active, 2: unactive 
     } 
    } 
}; 

Et voici mon code lors de la création d'un nouveau contact:

Contacts.create(contactData).exec(function (e1, newContact) { 
    if (e1) { 
     console.log("e1 ::: ", e1); 
    }; 

    // newContact is filled with contact new data.. 
    console.log("Contact data has been created", newContact, schoolId); 

    // Adding schools to newContact (schoolId has a value here); 
    newContact.schools.add(schoolId); 

    // Save 
    newContact.save(function (err) { console.log('err', err) }); 
}); 

Cependant, quand je vérifie sur ma base de données, contacts a été créé, mais sans schools attributs. Et le schools associé n'a toujours pas d'attribut contacts.

J'ai essayé ce qui suit;

newContact.schools.add([schoolId]); 
// or -- 
newContact.schools.add(schoolObj); 
// or -- 
newContact.schools.add([schoolObj]); 

J'ai essayé de changer l'attribut dominant entre ces deux collections et faire l'exécution inversée comme,

school.contacts.add(newContact); 

J'ai aussi essayé ces solutions et pas lucks;

Suis-je manque quelque chose ici? Toute suggestion est appréciée ..

Répondre

1

Votre code est bon, il attache schools à contacts.

En sails console, exécutez ceci:

Contacts.find(contactId).populateAll().exec(console.log); 

Si elle imprime un contact avec tableau des écoles peuplées, les données sont persista dans DB. Il pourrait être dans une collection séparée plutôt que d'être à l'intérieur Contacts dans MongoDB.

PS: pipeline définition a une faute de frappe dans defaultTo (devrait être defaultsTo)

+0

Je suis tellement stupide .. Je viens de réaliser que le nombre de plusieurs est dans une autre collection. Merci pour votre réponse.. –