2013-04-25 6 views
8

तो मेरा/config/मॉडल इस तरह दिखता है।पर्सिस्टेंट यसोड में कई से ज्यादा करने का सबसे अच्छा तरीका क्या है?

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

मान लें डेटाबेस में आदानों क्रमशः Person "Batman"Person "Superman"Car "SUV"Car "Ford" हैं।

मैं वर्तमान में इसे अपने हैंडलर में जोड़ने के लिए कर रहा हूं।

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 

क्या ऐसा करने का कोई आसान तरीका है? क्या ऐसी अभिव्यक्ति करने के लिए कोई सम्मेलन है?

उत्तर

1

नहीं, वर्तमान में इस तरह की एक क्वेरी के लिए कोई शॉर्टेंड नहीं है (जिसे मैं कम से कम सोच सकता हूं)।

1

त्रुटि के लिए कॉल आपके ऐप को रोक देगा। logError बेहतर हो सकता है।

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

मैं एक हैंडलर के तहत यह कर रहा हूँ, यह मुझे त्रुटि पार्स दे रहा है किसी भी विचार:

यह कम है? 'postFromR :: हैंडलर RepHtml postFormR = कर FormSuccess रेस की मामले परिणाम -> _ <- runDB $ डालने $ PersonCar persionId carId _ -> $ (logError)" त्रुटि "' – HHC

+0

@HHC, मैं जोड़ लिया है एक सम्मिलित रेखा के चारों ओर ब्लॉक करें, जिसके बाद बाद में एक वापसी अभिव्यक्ति की आवश्यकता होती है। एक yesod स्थापना के साथ परीक्षण, कोड फिर से पकड़ो। अपने मॉडल नामों की जांच करें (PersonId के बजाय PesionId, PesonCar बजाय PersonCar) –

संबंधित मुद्दे

 संबंधित मुद्दे