代码之家  ›  专栏  ›  技术社区  ›  Brian

同时写入两个数据库引用

  •  1
  • Brian  · 技术社区  · 7 年前

    我有一个Firebase web应用程序作为注册系统。当用户注册课程时,课程数据作为回调函数的一部分添加到其所有注册的列表中。当用户注册时,最新的类在列表中被复制。在页面加载时,每个课程只列出一次。

    实时数据库结构

    {
      courses: {
        courseIdA: {
          // course data
        },
        couseIdB ... {}
      },
      users: {
        uid: {
          regs: {
            courseIdA: true
          }
        }
      }
    }
    

    member object 以及他们的 users uid courses 用户 有没有办法同时给两者写信?或者我需要为数据库设计一个更好的结构吗?

    上课,倾听变化

    PDReg.prototype.getAllClasses = function() {
      this.database = firebase.database()
      var uid = firebase.auth().currentUser.uid;
      var courses = [];
      var today = new Date().toISOString();
    
      this.classesRef = this.database.ref('courses');
      this.userRef = this.database.ref('users/' + uid + "/regs");
    
        var setClass = function(snapshot) {
          var course = snapshot.val();
          course.key = snapshot.key;
    
          // check for the current user in a course
          if(course.members) {
    
            if(course.members.hasOwnProperty(uid)) {
    
              // This callback fires twice when someone registers
              this.buildUserClasses(course);
            } else {
              this.buildAllClasses(course)
            }
          } else {
            this.buildAllClasses(course)
          }
        }.bind(this);
    
        // listen for changes to the classes database, rebuild the UI
        this.classesRef.orderByChild('start').startAt(today).on('child_added', setClass);
        this.classesRef.on('child_changed', setClass);
    };
    

    登记

    PDReg.prototype.register = function(e) {
      // It's a form submit, don't reload the page
      e.preventDefault();
      var form = this.courseForm;
      var classes = [];
      var uid = firebase.auth().currentUser.uid;
    
      for (var i=0; i<form.elements.length; i++) {
        // build the object to submit and add to an array
      }
    
      for (var i=0; i<classes.length; i++) {
        this.coursesRef = this.database.ref('courses/' + classes[i].id + '/members/' + uid);
    
        // Write the member object to `courses` under the correct key
        this.coursesRef.set({'code': classes[i]['code']}).then(function(classes) {
        // write to the user ref
        firebase.database().ref('users/' + uid + '/regs/' + id).set(true);
        onSuccess(title);
    document.getElementById('allCourses').removeChild(document.getElementById(id))
        }, function(e) {
          onFailure(e, title);
        });
      }
    };
    
    0 回复  |  直到 7 年前