2013-04-02 53 views
11

Tôi mới tham gia phần tiếp theo và tôi đang cố gắng tìm ra, làm cách nào để tôi mô hình mối quan hệ một-nhiều.Làm thế nào để mô hình liên kết một-nhiều trong phần tiếp theo?

Sự cố của tôi như sau: một thuật ngữ, nhiều bài viết.

var Term = sequelize.define('Term', ...); 
var Paper = sequelize.define('Paper', ...); 

Giả sử tôi có một thuật ngữ. Mỗi học kỳ có thể có nhiều giấy tờ, và tôi muốn thêm/xóa giấy tờ cho học kỳ của tôi. Tôi cũng muốn nhận được tất cả các giấy tờ cho thuật ngữ này.

var term; 
... 
term.getPapers(...); 
term.setPapers(...); 
term.addPaper(paper); 
term.removePaper(paper); 

Bây giờ, giả sử tôi có một bài báo. Tôi muốn lấy/đặt thuật ngữ cho bài báo của mình.

var paper; 

... 

paper.getTerm(); 
paper.setTerm(); 

Làm cách nào để đạt được bằng cách sử dụng phần tiếp theo? Tôi đã nghiên cứu tài liệu hàng giờ, và cũng tìm kiếm một số keo dán trên lưới, nhưng không có kết quả. Tôi thấy loại liên kết này rất kém tài liệu trong phần tiếp theo (một-một và nhiều-nhiều là tốt hơn).

Cập nhật:

Được rồi, vài giờ sau, tôi làm việc ra làm thế nào nó hoạt động:

Term.hasMany(Paper, { as: 'papers' }); 
Paper.hasOne(Term); 

Bây giờ chúng ta có thể làm:

term.addPaper(paper); 
term.removePaper(paper); 

paper.getTerm() 
    .success(function(term) 
    { 
    ... 
    }); 
paper.setTerm(term); 

Tôi đã quen với Django, và có vẻ như phần tiếp theo là ít trưởng thành hơn, cả về mã và tài liệu ...

+1

Tôi đồng ý, các hiệp hội Sequelize là cực kỳ phản trực giác đối với tôi và các tài liệu không được giúp đỡ. Cảm ơn vì đã đăng tải điều này. –

+3

Bạn có chắc chắn rằng 'Paper.hasOne()' là một kiểu kết hợp đúng trong trường hợp này không? Bạn không nên sử dụng 'Paper.belongsTo()'? Điều đó có ý nghĩa hơn theo các tài liệu. –

+0

Tôi không đồng ý vì tôi không nghĩ rằng một-một và nhiều-nhiều là tốt hơn .. Các tài liệu là rất lạ. Nó thậm chí không giải thích các tham số và các giá trị trả về của các phương thức được tạo bởi các kết hợp. Cảm ơn vì đã đăng tải điều này. : D (Sau khi đọc một số, bây giờ tôi nghĩ @SlavaFominII có lẽ là đúng) – SCLeo

Trả lời

2

nó phụ thuộc vào cách bạn đã cấu trúc cơ sở dữ liệu, điều này sẽ làm suy nghĩ ..

paper.hasOne(term,{as:"PaperTerm"}) 
3

Trước tiên, bạn phải tạo sự liên kết. Bạn đã làm điều đó một cách chính xác:

Term.hasMany(Paper, { as: 'papers' }); 
    Paper.hasOne(Term); 

Sau đó, bạn phải đồng bộ tờ khai này:

sequelize.sync(); 

Và bây giờ kiên trì dữ liệu. Bạn cần phải lưu các đối tượng trước khi liên kết nó.

term.create()... 
    paper1.create()... 
    paper2.create()... 

    term.setPapers([paper1, paper2]).success(function() { 
    // saved! 
    }) 

tham khảo: http://docs.sequelizejs.com/en/1.7.0/docs/associations/#many-to-many-associations

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