मैं अपने सिद्धांत 2 इकाई में एक अद्वितीय बाधा बनाना चाहता हूं जैसे name
& test
अद्वितीय स्तंभानुसार हैं। मतलबसिद्धांत 2 में अद्वितीय बाधाएं, सिम्फनी 2
obj1
- नाम: name1
- परीक्षण: परीक्षण
obj2
- नाम: NAME2
- परीक्षण: परीक्षण < ----
यह दोहराया के रूप में परीक्षण दोहराया गया है, जो त्रुटि पैदा करना चाहिए।
मैंने अद्वितीय बाधा (Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity
) का उपयोग करने की कोशिश की। की कोशिश की
* @UniqueEntity("name")
* @UniqueEntity("test")
और
* @UniqueEntity({"name", "test"})
दोनों ही ट्रिगर त्रुटि लगते हैं जब मैं दोनों नाम और परीक्षण दोहराया गया है। जैसे।
obj1
- नाम: name1
- परीक्षण: परीक्षण
obj2
- नाम: NAME2
- परीक्षण: परीक्षण
क्या सही सेटअप? या मैंने कहीं गलती की हो सकती है?
शायद मैं जैसे सिद्धांत एनोटेशन शामिल करना चाहिए:
@Table(name="ecommerce_products",uniqueConstraints={@UniqueConstraint(name="search_idx", columns={"name", "email"})})
लेकिन है कि अभी भी अभ्यस्त मेरी सिम्फोनी फ़ॉर्म सत्यापन मुझे लगता है कि संभाल?
अद्यतन
मेरे परीक्षण कोड:
/**
* @ORM\Entity
* @ORM\Table(name="roles")
* @UniqueEntity("name")
* @UniqueEntity("test")
*/
class Role {
/**
* @var integer
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue
*/
protected $id;
/**
* @var string
*
* @ORM\Column(type="string", length=32, unique=true)
* @Assert\MaxLength(32)
* @Assert\Regex("/^[a-zA-Z0-9_]+$/")
*/
protected $name;
}
$v = $this->get('validator');
$role = new Role();
$role->setName('jm');
$role->setTest('test');
$e = $v->validate($role);
echo '=== 1 ===';
var_dump($e);
if (count($e) == 0)
$em->persist($role);
$role2 = new Role();
$role2->setName('john');
$role2->setTest('test');
$e = $v->validate($role2);
echo '=== 2 ===';
var_dump($e);
if (count($e) == 0)
$em->persist($role2);
$em->flush();
पहली बार चलाने (खाली टेबल) पर:
=== 1 ===object(Symfony\Component\Validator\ConstraintViolationList)#322 (1) {
["violations":protected]=>
array(0) {
}
}
=== 2 ===object(Symfony\Component\Validator\ConstraintViolationList)#289 (1) {
["violations":protected]=>
array(0) {
}
}
लेकिन मैं अद्वितीय बाधा के बारे में डेटाबेस परत पर एक त्रुटि प्राप्त करते हैं। तो मुझे सत्यापन कार्य को कैसे काम करना चाहिए?
अपने दूसरे उदाहरण में, खेतों में से कोई भी दोहराया गया है। यह आपके प्रश्न को थोड़ा अस्पष्ट बनाता है। – greg0ire
@ gre0ire, 'test' डुप्लिकेट किया गया है? –
ओह क्षमा करें। लेकिन इससे पहले, आप "दोनों" कहते हैं। तो दूसरे उदाहरण के साथ क्या मामला है? – greg0ire