2012-11-24 12 views
18

में स्थिति "स्थिति कब" संग्रहीत करना सिद्धांत 2.1 के रूप में, CASE जब कथन समर्थित है लेकिन इसमें बहुत से दस्तावेज नहीं हैं। मेरा लक्ष्य है, तो एक तस्वीर एक उपयोगकर्ता द्वारा पसंदीदा बनाया जा चुका है बताने के लिए एक बूलियन मान सेट करने के लिए है:Doctrine2 इकाई

 ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as is_favorited") 
     ->leftJoin("p.favorites", 'f', 'WITH', 'f.owner = :viewer') 
     ->orderBy("p.date_posted", "DESC") 
     ->setParameters(array("owner" => $owner, "viewer" => $viewer)); 

लेकिन क्योंकि मेरे संस्थाओं JMSSerializer द्वारा json के रूप में तब्दील किया जा रहा है, मैं मामला सेट करना चाहते हैं के रूप में जब परिणाम एक इकाई पर संपत्ति।

 ->addSelect("CASE WHEN f.photo is NULL THEN false ELSE true END as p.is_favorited") 

लेकिन Unforunately सिद्धांत यह पसंद नहीं लगता है:

[Syntax Error] line 0, col 65: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got '.'

वहाँ की स्थापना DQL एक इकाई पर गुण बनाया के लिए एक विकल्प है?

+0

DQL साथ परिणाम सेट मानचित्रण काम करता है? – gremo

+0

'-> addSelect (' f.photo न्यूल नहीं है ') का एक ही प्रभाव नहीं होगा (लेकिन शायद सिद्धांत को अपनाना नहीं है)? –

+0

क्या आपने 'केस' में 'केस' को आसानी से encapsulating करने की कोशिश की थी (जैसा कि एफ.फोटो पूर्ण है तो झूठी ईएलएसई सच अंत) क्या है _ पसंदीदा '? – prodigitalson

उत्तर

2

सीधे क्वेरी में संपत्ति मूल्य सेट करने का कोई तरीका नहीं है। इसके बजाए, आप इकाई में न मैप किए गए फ़ील्ड को जोड़ सकते हैं, और फिर परिणामों के माध्यम से चल सकते हैं और इसे सेट कर सकते हैं। इस मामले में JMSSerializer उस क्षेत्र को क्रमबद्ध करें और आप उस पर आवश्यक प्रकार और अन्य मेटा जानकारी सेट कर सकते हैं।

0

क्या आप इसे आजमा सकते हैं। यह DQL

->addSelect("SUM(CASE WHEN f.photo is NULL THEN 0 ELSE 1 END) as p.is_favorited"); 
+0

मेरे पास अब ऐसा सेटअप नहीं है जिसने शुरुआत में यह प्रश्न बनाया था, लेकिन समाधान के दौरान यह एक लायक हो सकता है। क्या यह वास्तव में काम करता है? – Dandy

-1

के साथ काम करेंगे त्रुटि यह लग रहा है जैसे कि यह शिकायत है से, क्योंकि आप अपने चुनिंदा बयान में सूचीबद्ध तालिका से कोई जरूरत नहीं है।

+0

सीधे किसी भंडार से प्रश्न बनाते समय आपको "से()" निर्दिष्ट करने की आवश्यकता नहीं होती है क्योंकि सिद्धांत स्वचालित रूप से आपके लिए भर जाएगा। उदा।, "$ भंडार-> createQueryBuilder ('p')" – Dandy

-1

आप बस अपनी

->from() 

लाइन है कि "एफ" और के लिए तालिका नाम देता है जोड़ने की जरूरत है

+0

सीधे किसी भंडार से क्वेरी बनाते समय आपको "से()" निर्दिष्ट करने की आवश्यकता नहीं होती है क्योंकि सिद्धांत स्वचालित रूप से आपके लिए भर जाएगा। – Dandy

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

  • कोई संबंधित समस्या नहीं^_^