Firebase Firestore get data from Multiple collection like SQL Join
Bir takım projelerle uğraşmam sebebiyle bir süredir burada yazı yazamıyordum. Benim gibi zor durumda kalanlara yardımcı olması ümidiyle çözüm bulmakta zorlandığım ve bence çok önemli olan bu konuyu paylaşmak istedim.
Elimizde Categories (Cats), Posts,Users isminde üç tane tablomuz olduğunu ve bu üç tablodan join işlemi gerçekleştirmek istediğimizi düşünelim.
Öncelikle Bu üç tablo için bir model oluşturalım.
export class Cat{
catId : number;
catName : string;
}export class User{
userId : number;
username : string;
}export class Post{
postId : number;
postTitle : string;
postContent : string;
user : User;
cat : Cat;
}
Şimdi de join işlemi için kodlamamızı yapmak kaldı.
posts : Post[] = [];
ref = firebase.firestore();constructor() { }ngOnInit(){
this.getPosts(1); // Category Id' si 1 olan postları getirdik.
}getPosts(catId: number) {
let post: Post = new Post();
this.ref.collection('/posts').where('catId', '==', catId).get().then(postDoc => {
postDoc.forEach(element => {
post.postId = element.data().postId;
post.postTitle = element.data().postTitle;
post.postContent = element.data().postContent;
this.ref.collection('/users').where('userId', '==', element.data().userId).get().then(userDoc => {
post.user = userDoc.docs[0].data() as User;
this.ref.collection('/cats').where('catId', '==', catId).get().then(catDoc => {
post.cat = catDoc.docs[0].data() as Cat;
}).catch(err => {
console.log(err);
})
}).catch(err => {
console.log(err);
});
this.posts.push(post);
});
console.log(this.posts);
}).catch(err => {
console.log(err);
})
}
Bu şekilde Posts datası içinde Category Id si 1 olan bütün postları listelemiş olduk.
Umarım sizler için faydalı bir yazı olur.