【问题标题】:Angular 2 Firebase - How can I realize SQL behaviour?Angular 2 Firebase - 如何实现 SQL 行为?
【发布时间】:2017-06-02 18:18:58
【问题描述】:

我知道可以将一个对象存储在另一个对象中。但我不想使用这种结构。

例如,我希望有以下结构:

{
    courses:
        01: {
            courseName: "English"
        },
        02: {
            courseName: "German"
        }
    teachers:
        01: {
            lastname: "smith",
            forename: "john"
        },
        02: {
            lastname: "schmidt",
            forename: "john"
        }
    coursePerTeacher:
        01: {
            courseID: "01",
            teacherID: "02"
        },
        02: {
            courseID: "02",
            teacherID: "02"
        },
        03: {
            courseID: "01",
            teacherID: "01"
        }
}

每个节点都应该像 SQL 中的一个表。

我在 Angular 2 中使用 angularfire2 来访问 firebase 数据库。 第一个问题是我应该创建和使用多少服务?我想我可以创建一个 courseService,一个teacherService。 coursePerTeacherService 有用吗?还是只使用一种服务和不同的方法更好? 我的问题不是在每个服务中创建一个 CRUD。但是我怎样才能创建一个页面,让我知道约翰施密特老师能够教授德语和英语。 John Smith 只教英语。

我的问题是我目前的成功是我只能显示存储在 coursePerTeacher 节点中的内容。但是由此我想由老师总结并显示引用的id背后的内容。换句话说就是名字。

我真的不知道如何编码。组件类中的部分是什么,服务类中的部分是什么?

接下来我可以对这种结构的行为做些什么?

{
    categories:
        01: {
            cat_name: "java programming",
            cat_description: "here is everything you need to know about java"
        },
        02: {
            cat_name: "html",
            cat_description: "...."
        }
    topics:
        01: {
            topic_subject: "need help in java",
            topic_date: "08/01/2017",
            topic_cat: "01",
            topic_by: "01"
        },
    replies:
        01: {
            reply_content: "java doesn't work anymore?",
            reply_date: "08/01/2017",
            reply_topic: "01",
            reply_by: "01",
        },
        02: {
            reply_content: "what's your specific question?",
            reply_date: "08/01/2017",
            reply_topic: "01",
            reply_by: "02",
        },
    users:
        01: {
            username: "newbie",
        }
        02: {
            username: "proCoder",
        }
}

我目前没有一个真实的例子。我希望我的意思可以理解,并且结构中没有错误。

如果引用不在特定节点内,我应该如何工作?如果它在每个对象中,我应该如何工作?

我真的有麻烦。一个详细的教程或一个简单的例子(组件和服务)会非常好。

我以前从未使用过 NoSQL 数据库。

抱歉英语不好,在我的国家是半夜。

【问题讨论】:

    标签: angular firebase firebase-realtime-database angularfire2


    【解决方案1】:

    对于来自 sql 背景的 Firebase 问题,此播放列表将帮助您很多 https://www.youtube.com/watch?v=WacqhiI-g_o&list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s

    大多数时候,您只需在组件中插入 firebase 服务并在那里执行逻辑即可。如果您需要额外的服务(不是 Firebase)或不想复制您的代码,最好只有一个 TeacherService,然后取决于您是否要延迟加载您的课程,您可以创建一个 CourseService。如果在同一屏幕中显示教师和课程,您可以在一项服务中完成所有操作。因此,要恢复,最好在您的视图之后为您的服务建模。

    如果您要在服务中使用 firebase,您可以执行以下操作: 从'angularfire2'导入{AngularFire,FirebaseListObservable}; 从'@angular/core'导入{ Injectable };

    @Injectable()
    export class TeacherService{
      constructor(private af: AngularFire) {}
    
      getTeachers(): FirebaseListObservable {
        return this.af.database.list('/teachers');
      }
    
      addTeacher(teacher: string) {
        return this.af.database.list('/teachers').push(teacher);
      }
    
      deleteTeacher(teacher: any) {
        return this.af.database.list('/teachers').remove(teacher)
      }
    
    getCourses(teacher:any){
        return this.af.database.list('/teachers/'+teacher.key+'/courses') //this depends on how you structure your db
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 2017-06-25
    • 1970-01-01
    • 2017-07-27
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多