2016-04-25 7 views
0

Ich habe derzeit die folgenden Tabellen in meinem Segel-Projekt erstellt, ich habe eine Tabelle mit dem Namen "Benutzer" und eine Tabelle mit dem Namen "Anwesenheit". Diese Tabellen sind in einer MySQL-Datenbank gespeichert. Jeder Benutzer kann Teil vieler Teilnehmer sein und jeder Teilnehmer kann viele Benutzer haben.Wie sollte ich Attribute in einer Beziehung viele zu viele in sails.js speichern?

Dies wird mit dem folgenden Code erreicht:

Anwesenheits-Modell:

attributes: { 

    attendees: { 
     collection: 'user', 
     via: 'attendancelist', 
     dominant: true 
} 

User-Modell:

attributes{ 

    attendancelist: { 
     collection: 'attendance', 
     via: 'attendees' 
    } 
} 

Dies wird eine Tabelle mit dem Namen erstellen: attendence_attendees__user_attendancelist

Now I möchte den "Status" jedes Benutzers speichern. Der Status wird ein Bool sein, das beschreibt, ob der Benutzer der Anwesenheit anwesend war oder nicht.

Ich möchte den Status jedes Benutzers in der Tabelle "attendence_attendees__user_attendancelist" speichern.

Ist dies möglich oder gibt es eine bessere Möglichkeit, den Status zu speichern?

Ich habe es geschafft, eine benutzerdefinierte assoziative Tabelle zu erstellen, aber Segel fügt nun nicht mehr Daten zur assoziativen Tabelle hinzu. Ich verwende den folgenden Code ein:

//Attendance model 
attributes: { 

    attendees: { 
     collection: 'user', 
     via: 'attendancelist', 
     through: 'userattendance' 
} 

//User model 
attributes{ 

    attendancelists: { 
     collection: 'attendance', 
     via: 'attendees', 
     through: 'userattendance' 
    } 
} 

//Userattendance model 
attributes:{ 

    attendancelist: { 
     model: 'attendance', 
     foreignKey: true, 
     collumnName: 'attendance_id' 
    }, 

    attendees: { 
     model: 'user', 
     foreignKey: true, 
     collumnName: 'user_id' 
    }, 

    status: { 
     type: 'boolean', 
     defaultsTo: false 
    } 

} 

//controller method to add data: 
getGroupAttendees: function(req, res){ 
    Group.findOne({id: req.param('groupID')}) 
     .populateAll() 
     .exec(function getGroup(err, group){ 
      if(err) return res.negotiate(err); 
      if(!groep) return res.json(401, {err:'group not found'}); 
      var users = []; 
      group.attendees.forEach(function(user){ 
       users.push(_.pick(user, ['id'])); 
      }) 

      var attendancelistOBJ = { 
       planning: 1, 
       attendees: users 
      } 
      Attendance.create(attendancelistOBJ, function agendaCreated(err, lijst){ 

        if(err) return res.negotiate(err); 
        lijst.save(function(err, lst){ 
         if(err) return next(err); 
         return res.json(attendancelistOBJ.attendees); 
        }); 

      }); 
     }) 
} 

Die obige Controller-Methode verwendet, perfekt mit der automatisch generierten assoziativen Tabelle zu arbeiten, aber mit dem benutzerdefiniert man es nicht mehr beliefert Benutzern und Listen auf den Tisch.

Antwort

0

Nicht sicher, dass ich vollständig folge, aber wenn Sie eine Viele-zu-Viele-Beziehung haben, benötigen Sie eine assoziative Tabelle, die die beiden Tabellen zusammenfügt und der Primärschlüssel in dieser Tabelle ist ein zusammengesetzter Schlüssel aus beiden Primärschlüsseln die User und Attendance Tabellen. Vielleicht könnten Sie Ihren Status in dieser assoziativen Tabelle speichern.

Macht das Sinn und/oder helfen?

+0

Ich habe eine assoziative Tabelle, wird automatisch von der Wasserlinie generiert. Es ist die oben genannte Tabelle "attentiven_attendees__user_attendancelist". Ich möchte eine Spalte in dieser Tabelle hinzufügen, aber ich weiß nicht, wie ich diese Tabelle in Sails ändern soll. –

Verwandte Themen