2012-05-03 32 views
9

Làm cách nào để khai báo cho Persistent rằng tôi có một bảng, khóa chính trong đó là sự kết hợp của hai trường?Làm cách nào để xác định khóa tổng hợp trong Persistent

Ví dụ, giả sử tôi có một bảng chứa first_name và last_name, sau đó trong cú pháp SQL tôi sẽ cần một cái gì đó như:

CONSTRAINT pk_PersonID PRIMARY KEY (first_name,last_name) 

Cảm ơn,

Trả lời

3

Xem http://www.yesodweb.com/book/persistent, phần độc đáo

Person 
    firstName String 
    lastName String 
    age Int 
    PersonName firstName lastName 
    deriving Show 

Điều này xác định khóa duy nhất được tạo từ cả firstName và lastName.

+1

Điều đó làm cho nó trở nên độc đáo, nhưng nó có phải là khóa chính không? –

+0

Theo mặc định, có một trường id số nguyên là khóa chính và được sử dụng trong nội bộ. Tại sao bạn cần một khóa chính cụ thể? Nếu thực sự bạn làm, tôi không nghĩ rằng bạn có thể làm điều đó bằng cách sử dụng vanilla Persistent, bạn có thể phải mã bảng của mình. –

+1

Tôi đang sử dụng một bảng hiện có được chia sẻ với các ứng dụng hiện có ... Có vẻ như tôi sẽ cần phải khắc phục điều này với một số cách giải quyết sau đó. –

3

Bạn có thể sử dụng cú pháp Primary <field1> <field2> theo mã bên dưới.

PrimaryCompositeWithOtherNullableFields 
    foo String  maxlen=20 
    bar String  maxlen=20 
    baz String Maybe 
    Primary foo bar -- THIS LINE -- 
    deriving Eq Show 
    enter code here 

Đoạn mã trên được lấy từ một trong các bài kiểm tra tại https://github.com/yesodweb/persistent/blob/master/persistent-test/src/CompositeTest.hs#L74

This wiki page giải thích cú pháp khác nhau để xác định mô hình trong dai dẳng. Nó thực sự cần phải là một phần của cuốn sách Yesod.

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