2016-08-05 39 views
6

Giả sử rằng các dữ liệu giống như thế nàycăn cứ hỏa lực: tham gia bảng

post: { 
    authorId: '123AA', 
    title: 'first Post', 
    body: 'yay' 
} 

author: { 
    uid: '123AA', 
    displayName: 'Richard' 
    email: '[email protected]' 
} 

Tôi muốn làm một bài đăng với tên tác giả:

<div className="post"> 
    <div className="title">{post.title}</div> 
    <div className="body">{post.body}</div> 
    <div className="author-name">{post.author.displayName}</div> //problem 
</div> 

Một bài item lấy chỉ chứa một tác giả của uid, nhưng Tôi cần tác giả của displayName. Làm cách nào để điền vào trường tác giả khi truy xuất các bài đăng? Đây là những gì tôi thực hiện để tìm nạp các bài đăng ngay bây giờ:

const postsRef = firebase.database().ref('posts/') 
postsRef.on('value', (snapshot) => { 
    this.setState({posts: snapshot.val()}) 
}) 
+1

của nó tốt hơn để loại bỏ reactjs từ các thẻ, câu hỏi không có gì để làm với Phản ứng – webdeb

+1

Theo như tôi biết bạn không thể làm "tham gia" với firebase, bạn cần phải thực hiện một yêu cầu thứ hai để có được một cái gì đó từ bộ sưu tập khác –

+1

như vậy là những gì mọi người làm gì? Đối với mỗi bài đăng được thêm vào, bạn thực hiện một yêu cầu khác để lấy đối tượng người dùng từ máy chủ? –

Trả lời

7

Không chắc chắn trong cơ sở dữ liệu thực, nhưng tôi thường tham gia vào angular2. Đây là mã mẫu của tôi.

import { Component, OnInit } from '@angular/core'; 
import { AngularFire } from 'angularfire2'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/map'; 

@Component({ 
    selector: 'app', 
    templateUrl: ` 
    <ul> 
     <li *ngFor="let p of posts | async"> 
      {{ p.title }} - {{ (p.authorName | async)?.displayName }} 
     </li>   
    </ul> 
` 
}) 
export class InitComponent implements OnInit { 
    posts: Observable<any[]>; 

    constructor(private af: AngularFire) {} 

    ngOnInit() { 
     this.posts = this.af.database.list('/posts') 
     .map(posts => { 
      posts.map(p => { 
       p.authorName = this.af.database.object('/authors/'+p.authorId); 
      }); 
      return posts; 
     }); 
    } 

Cấu trúc cơ sở dữ liệu như sau:

/posts/postId/{authorId, title, body} 
/authors/authorId/{displayName, email} 

Hope this helps

Các vấn đề liên quan