जब मैं फॉर्म जमा कर रहा था और ऑब्जेक्ट मॉडल बना रहा था तो मुझे SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column "object_id"
त्रुटि मिली।
मेरे पास दो सिद्धांत संस्थाएं हैं:
class Object {
/**
* @var Document[]|ArrayCollection
* @ORM\OneToMany(targetEntity="App\Entity\Document", mappedBy="mainObject", cascade={"persist"})
*/
private $documents;
}
class Document
{
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Object", inversedBy="documents")
* @ORM\JoinColumn(nullable=false)
*/
private $object;
}
और सिम्फनी फॉर्म:
class ObjectType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('documents', CollectionType::class, [
'allow_add' => true,
'entry_type' => DocumentType::class,
])
;
}
}
मेरा नियंत्रक कोड:
$object = new Object();
$form = $this->formFactory->create(ObjectType::class, $object);
$form->submit(json_decode($request->getContent(), true), false);
if ($form->isSubmitted() && $form->isValid()) {
$this->entityManager->persist($object);
$this->entityManager->flush();
}
त्रुटि इसलिए होती है क्योंकि सिद्धांत ऑब्जेक्ट से पहले दस्तावेज़ को सहेजता है। क्या बचत व्यवहार को बदलना संभव है?
1 उत्तर
इसे हल करने के लिए आप संग्रह प्रकार पर by_reference => false
का उपयोग कर सकते हैं। इसे गलत पर सेट करके, आप कह रहे हैं कि संपत्ति तक पहुँचने के बजाय हमेशा विधियों का उपयोग करें।
$builder
->add('documents', CollectionType::class, [
'allow_add' => true,
'entry_type' => DocumentType::class,
'by_reference' => false,
]);
कुछ मामलों में, संपत्ति का उपयोग विधियों के बजाय सीधे किया जाएगा। आप इस प्रॉपर्टी के बारे में यहां पढ़ सकते हैं। .
आप ऑब्जेक्ट पर अपनी addDocument()
विधि पर एक नया दस्तावेज़ जोड़ते समय भी ऑब्जेक्ट सेट करना चाहेंगे। यह कुछ इस तरह दिखना चाहिए:
public function addDocument(Document $document): object
{
$document->setObject($this);
$this->getDocuments()->add($document);
return $this;
}
इससे आपकी समस्या हल हो जानी चाहिए। मुझे यह भी लगता है कि object
नाम की इकाई का होना थोड़ा भ्रमित करने वाला है।
नए सवाल
php
PHP एक व्यापक रूप से उपयोग किया जाता है, उच्च-स्तरीय, गतिशील, वस्तु-उन्मुख, और व्याख्या की गई स्क्रिप्टिंग भाषा मुख्य रूप से सर्वर-साइड वेब विकास के लिए डिज़ाइन की गई है। PHP भाषा के बारे में सवालों के लिए इस्तेमाल किया।