2011-09-03 4 views
8

मुझे पता है कि मैं हमेशा MYSQL स्कीमा का उपयोग करके एक अद्वितीय डीबी कुंजी सेट कर सकता हूं, हालांकि ओआरएम की तरह की सिद्धांत ने आपको कोड में अद्वितीय होने के लिए कॉलम सेट करने की अनुमति दी है, तो केवल उत्सुक था?क्या Doctrine2 का उपयोग कर एक अद्वितीय कॉलम को लागू करने का कोई तरीका है?

उदाहरण के लिए मैं इसे कोड में कैसे बना सकता हूं ताकि उपयोगकर्ता नाम चलाने के समय कोड में अद्वितीय हो?

CREATE TABLE IF NOT EXISTS `user` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(300) COLLATE utf8_unicode_ci NOT NULL, 
    `email` varchar(300) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(300) COLLATE utf8_unicode_ci NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ; 






function insert_user($username,$email,$password) 
     { 
$user = new User(); 
$user->setUsername($username); //HOW CAN I MAKE THIS UNIQUE IN CODE? 
$user->setEmail($email); 
$user->setPassword($password); 

    try { 
      //save to database 
      $this->em->persist($user); 
      $this->em->flush(); 
     } 
     catch(Exception $err){ 

      die($err->getMessage()); 

      return false; 
     } 
     return true; 
     } 

उत्तर

19

मुझे लगता है कि यह वही है जो आप चाहते हैं?

<?php 
/** 
* @Entity 
* @Table(name="ecommerce_products",uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "email"})}) 
*/ 
class ECommerceProduct 
{ 
} 

http://www.doctrine-project.org/docs/orm/2.0/en/reference/annotations-reference.html#annref-uniqueconstraint

जब से मैं अपने कोड की जरूरत नहीं है मैं तुम्हें एक व्यावहारिक उदाहरण नहीं दे सकता।

+0

मैंने कोड जोड़ा है जैसा कि आपने – jini

+1

पूछा था, यह तालिका स्कीमा है जिसे आपको बदलने की आवश्यकता है, मैंने जो दस्तावेज लिंक किया है उसे देखें ... uniqueConstraints = {@ UniqueConstraint (name = "myname ", कॉलम = {" उपयोगकर्ता नाम "}) शायद वह होगा जो आप अपने मामले में जोड़ना चाहते हैं। – Andreas

+0

यह एक बेहतर उत्तर है क्योंकि यह अधिक परिस्थितियों में काम करता है – Dennis

2

आप @Table घोषणा

@UniqueConstraint

एनोटेशन इकाई स्तरीय स्तर पर @Table एनोटेशन के अंदर प्रयोग किया जाता है में uniq बाधाओं सेट करना होगा। यह निर्दिष्ट तालिका कॉलम पर डेटाबेस अद्वितीय बाधा उत्पन्न करने के लिए स्कीमाटूल को संकेत देने की अनुमति देता है। इसका अर्थ केवल स्कीमाट स्कीमा जनरेशन संदर्भ में है।

आवश्यक विशेषताओं: नाम: अनुक्रमणिका का नाम, कॉलम: स्तंभों की सरणी।

<?php 
/** 
* @Entity 
* @Table(name="user",uniqueConstraints={@UniqueConstraint(name="username_uniq", columns={"username"})}) 
*/ 
class User 
{ 
    /** 
    * @Column(name="username", length=300) 
    */ 
    protected $username; 
} 

स्रोत: http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/annotations-reference.html#annref-uniqueconstraint

37

बस एक वैकल्पिक समाधान है कि एक छोटे से सरल है प्रदान करते हैं।

यदि यह एक एकल स्तंभ है, तो आप बस स्तंभ परिभाषा पर एक अद्वितीय जोड़ सकते हैं: इस पर

class User 
{ 
    /** 
    * @Column(name="username", length=300, unique=true) 
    */ 
    protected $username; 
} 

प्रलेखन: http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#column

एकाधिक कॉलम पर एक अद्वितीय सूचकांक की जरूरत है, तो आप अभी भी प्रदान की गई एंड्रियास विधि का उपयोग करने की आवश्यकता है।

नोट: मुझे यकीन नहीं है कि यह कौन सा संस्करण उपलब्ध है। यह हो सकता है कि यह 2011 में अभी तक उपलब्ध न हो।

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

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