Doctrine 2 nullable = false का उपयोग कईToOne संबंध में नहीं कर सकता है?


110

एक Userइसके Packageसाथ जुड़ा हुआ है। कई उपयोगकर्ता एक ही पैकेज को संदर्भित कर सकते हैं। Userएक Packageपरिभाषित के बिना मौजूद नहीं हो सकता । Userसंबंध होना चाहिए। संबंध द्विदिश है, इसलिए Packageइसमें शून्य या अधिक उपयोगकर्ता हैं।

इन आवश्यकताओं के लिए नेतृत्व ManyToOneके लिए संबंध Userऔर OneToManyका संबंध Packageसिद्धांत 2 में हालांकि package_idमें userतालिका (कि विदेशी कुंजी है) की अनुमति देता है nullमान। मैंने सेटिंग की कोशिश की है, nullable=falseलेकिन कमांड:

 php app/console doctrine:generate:entities DL --path="src" --no-backup

कहते हैं कि nullableसंबंध के लिए कोई विशेषता नहीं है ManyToOneमुझे क्या याद आ रहा है?

class User
{

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

    /**
     * @ORM\ManyToOne(targetEntity="Package", inversedBy="users")
     */
    private $package;

}

class Package
{

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

    /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="package")
     */
    private $users;

}

संपादित करें : हल। कृपया ध्यान दें कि यह गलत है (नोट दोहरे उद्धरण):

 @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable="false")

जबकि यह सही है:

@ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)

जवाबों:


193

अपने ManyToOne संबंध पर JoinColumn एनोटेशन का उपयोग करें:

/**
 * @ORM\ManyToOne(targetEntity="Package", inversedBy="users")
 * @ORM\JoinColumn(name="package_id", referencedColumnName="id", nullable=false)
 */
private $package;

ManyToOne अपने आप में अशक्त नहीं हो सकता है, क्योंकि यह एक विशिष्ट कॉलम से संबंधित नहीं है। दूसरी ओर JoinColumn डेटाबेस में कॉलम की पहचान करता है। इस प्रकार, आप "सामान्य" विशेषताओं का उपयोग कर सकते हैं जैसे अशक्त या अद्वितीय!


धन्यवाद, मैं कोशिश की है, लेकिन दुर्भाग्य से स्तंभ package_idअभी भी अशक्त के रूप में चिह्नित किया गया है - हाँ, डिफ़ॉल्ट - NULL। किसी भी प्रकार की मदद की बेहद सराहना की जाती है।
गार्मो

5
कोई बात नहीं, एक दोहरी बोली पूरी तरह से बात को तोड़ती है। यह nullable="false"गलत है!
गार्मो

क्या आपने डेटाबेस को लुभाने और इसे नया बनाने की कोशिश की? मैं सिर्फ अपने डेटाबेस पर एक नज़र रखता था (जैसा कि ऊपर उल्लेख किया गया है उसी JoinColumn एनोटेशन का उपयोग करके) और इसे NotNull के रूप में चिह्नित किया गया है!
20 दिसंबर को Sgoettschkes

5
इसके लिए धन्यवाद, मैं सोच रहा था कि मैं इसे @ORM\Column(nullable=true)अपने बहुत से अशक्त बनाने के लिए क्यों नहीं बना सका !
स्कॉट फ्लैक

यदि आपने सही विकल्प कॉन्फ़िगर किया है और आप अभी भी अपने डेटाबेस कॉलम को गलत मान के साथ देखते हैं, तो Entity Manager के लिए मेटाडेटा कैश साफ़ करना याद रखें। सिम्फनी पर, आप console doctrine:cache:clear-metadataकमांड का उपयोग कर सकते हैं
मैसिमिलियानो अरियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.