2013-04-25 35 views
8

Vì vậy,/config/mô hình của tôi trông như thế này.Cách tốt nhất để làm nhiều người trong nhiều người trong Yesod dai dẳng là gì?

Person 
    name Text 
Car 
    name Text 
PersonCar 
    personId PersionId eq 
    carId CarId eq 
    UniquePersonCar personId carId 

Giả sử các yếu tố đầu vào cơ sở dữ liệu là Person "Batman"Person "Superman"Car "SUV"Car "Ford" tương ứng.

Tôi hiện đang thực hiện việc này để liên kết chúng trong Trình xử lý của tôi.

runDB $ do 
    person <- selectFirst [PersonName ==. "Batman"] [] 
    car <- selectFirst [Carname ==. "SUV"] [] 
    let Entity personId _ = case person of 
          Just info -> infor 
          Nothing -> error "no such Person" 
    let Entity carId _ = case car of 
          Just info -> infor 
          Nothing -> error "no such Car" 
    _ <- insert $ PersonCar personId carId 

Có cách nào dễ hơn để thực hiện việc này không? Có một quy ước để làm biểu hiện như vậy không?

Trả lời

1

Không, hiện tại không có cách viết tắt cho loại truy vấn này (ít nhất tôi có thể nghĩ đến).

1

cuộc gọi đến lỗi sẽ tạm dừng ứng dụng của bạn. logError có thể tốt hơn.

Đây là ngắn hơn:

import Data.Conduit 
import qualified Data.Conduit.List as DCL 

runDB $ do 
    mbPersonId <- runResourceT $ selectKeys [PersonName ==. "Batman"] [] $$ DCL.head 
    mbCarId <- runResourceT $ selectKeys [CarName ==. "SUV"] [] $$ DCL.head 

    case (mbPersonId, mbCarId) of 
     (Just personId, Just carId) -> do 
       _ <- insert $ PersonCar personId carId 
       return() 

     _ -> $(logError) "error looking for Batman and SUV" 
+0

tôi đang làm nó dưới một handler, nó đem lại cho tôi phân tích lỗi, bất kỳ ý tưởng? 'postFromR :: Handler RepHtml postFormR = làm trường hợp kết quả của FormSuccess res -> _ <- runDB $ chèn $ PersonCar persionId carId _ -> $ (LogError) "lỗi" ' – HHC

+0

@HHC, tôi đã thêm một chặn xung quanh dòng chèn, cần biểu thức trả về sau đó. Thử nghiệm với cài đặt có sẵn, hãy lấy lại mã. Kiểm tra tên model của bạn (PesionId thay vì PersonId, PesonCar thay vì PersonCar) –

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