Добавить другие данные в базу данных Firebase - PullRequest
0 голосов
/ 20 сентября 2018

В моем веб-приложении я хочу создать классную комнату и добавить данные в базу данных Firebase.

var fbclass = firebase.database().ref().child('Classes');

function classcreation(q) {

  var usuid = generateId();
  var myClasses={};

  myClasses.TheClass = document.getElementById('classroomName').value;
  myClasses.Teacher = user.displayName;
  myClasses.TeacherEmail = user.email;
  myClasses.ClassID = usuid;
  fbclass.child(user.uid).set(myClasses);
  }

function generateId(){
return 'xxxx-xxxx-xxxx'.replace(/[x]/g, function(){
  return (Math.random() * 9 | 0 ).toString();
  })
}

После отправки кнопки она сохранит данные в базе данных

enter image description here

, но проблема в том, если ясоздайте другой класс с тем же пользователем, он просто обновит TheClass [classname], а не создаст другой класс.

enter image description here

Что не так с моим кодом?Что я пропустил?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Вот несколько полезных указателей.

  1. Все ключи уникальны.Вы не можете иметь два индекса одного и того же ключа.Сказав это, вы назначаете ключ как user.uid, который всегда будет одинаковым.По сути, вы обновляете значение, присутствующее в ключе.

  2. Здесь я предполагаю, что вы хотите создать ключи на основе идентификатора пользователя, использующего базу данных.Таким образом, использование set сохранит только ваши данные, а это означает, что если вы дадите ему новый идентификатор пользователя, оно сотрет данные с вашего ключа Classes и установит его с вашим новым ключом user.uid, который вы предоставили.Если вы хотите добавить новый ключ, вам нужно использовать метод update вместо set.Он обновит ваш ключ Classes новым ключом user.uid, который означает, что вы добавляете данные к своему объекту Classes.Что-то на линии - fbclass.child(newUserID).update(myClasses);

Надеюсь, это поможет:))

0 голосов
/ 20 сентября 2018

Используя метод set(), вы записываете данные в местоположение fbclass.child(user.uid) (т.е. ссылку), см. doc .

Поскольку ваше местоположение основано на user.uid вы снова и снова используете одно и то же местоположение для данного пользователя: отсюда и перезапись (так как set() «перезаписывает любые данные в этом месте и во всех дочерних местоположениях»).

Вы должны генерировать уникальный ключ, каждый раз, когда вы пишете новую классную комнату для того же пользователя.Для этого вам следует использовать метод push() ( doc ), который «генерирует новое дочернее местоположение с использованием уникального ключа», следующим образом:

var newClassroomRef = fbclass.child(user.uid).push(
  {
    'Class_Id': '....',
    'Teacher': '....'
  }
);

Следующее также будет работать:

var newClassroomRef = fbclass.child(user.uid).push();
newClassroomRef.set({
  'Class_Id': '....',
  'Teacher': '....'
});

Обратите внимание, что это создаст дополнительный уровень в вашем дереве узлов под узлом user.uid;

- Classes
    - yo9HQ.......  <- user.uid
        - 6trQEd.......  <- classroom uid
           - Teacher: .....
           - .....: .....
        - PKH6fd.......  <- classroom uid
           - Teacher: .....
           - .....: .....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...