2010-10-12 14 views
12

मैं इस तरह इकाई है:doctrine2 में शामिल किए बिना आईडी कैसे प्राप्त करें?

/** 
* 
* @Table(name="table") 
* @Entity 
*/ 
class Table { 

    /** 
    * @Column(type="integer") 
    * @Id 
    * @GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 


    /** 
    * @ManyToOne(targetEntity="Entities\Users") 
    * @joinColumn(name="userId", referencedColumnName="id") 
    */ 
    private $User; 


    /** 
    * @Column(type="string") 
    */ 
    private $text; 


} 

मैं $q->getQuery()->getSingleResult()->getUser()->getUserId()

सिद्धांत उत्पन्न क्वेरी की तरह करते हैं:

SELECT * FROM table t INNER JOIN users u ON u.id = t.userId WHERE id = 100 

लेकिन डॉन 'टी अगर मैं मेज उपयोगकर्ताओं की जरूरत है, कैसे एक पाने के लिए यूज़र आईडी।

शुद्ध एसक्यूएल मैं सिर्फ

SELECT * FROM table WHERE id = 100 

कर सकते हैं और उन तालिका में शामिल होने के बिना userId पाने में

उत्तर

-4

मुझे डॉक्ट्राइन 2 नहीं पता है, लेकिन मैंने जो पढ़ा है उससे ओआरएम है। तो मैं सुझाव दूंगा कि आपको आलसी लोडिंग के एक रूप की आवश्यकता है जहां उपयोगकर्ता लोड नहीं होता है। This article suggests that lazy loading is available in doctrine2

यदि उपयोगकर्ता बाद में लौटाई गई तालिका पर उपयोग किया जाता है तो इसका परिणाम कई डीबी कॉल हो सकता है। आपको एक हिट में डेटा को पकड़ने के विचार से इसे वजन करना होगा।

+1

सवालों का जवाब नहीं है, अगर आप इस विषय से परिचित नहीं हैं! – Jeff

+0

@ जेफ मैंने अक्टूबर 2010 में इसका उत्तर दिया था कि मई 2011 तक मेरा कोई जवाब नहीं था। पोस्ट के सवाल के 7 महीने बाद। हालांकि सामान्य रूप से आप एक सीमित परिप्रेक्ष्य से सही हो सकते हैं, उपयोगकर्ता को उनकी समस्या के लिए समय पर जवाब नहीं मिला होगा। कोई भी तर्क दे सकता है कि चूंकि मैं ओआरएम से बहुत परिचित था, मुझे लगा कि मेरा जवाब उस वक्त उचित था। –

0

प्रलेखन के अनुसार, डी 2 इकाइयों को कभी भी विदेशी कुंजी का खुलासा नहीं करना चाहिए क्योंकि यह मैपिंग जानकारी द्वारा आंतरिक रूप से किया जाता है, हालांकि, जैसा कि आपने पाया है, अब इसकी आवश्यकता है और फिर यह मूल्य है। ऐसा करने के लिए, बस विदेशी कुंजी के लिए मैपिंग जानकारी की आपूर्ति करें।

5

इस प्रयास करें:

$q = $qb->getQuery(); 
$q->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true); 
24

तुम भी पहचान() फ़ंक्शन (सिद्धांत संस्करण> 2.2) को देखने के लिए चाहते हो सकता है।

उदाहरण:

SELECT IDENTITY(t.User) AS user_id from Table 

लौट चाहिए:

[ ['user_id' => 1], ['user_id' => 2], ... ] 

भी देखें: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#dql-functions

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