Following is my Code snippet, what i am trying to do is insert ID of Parent Table to child table along with inserting Data to the Child table at same time. Following is my code Snippet
public function addAction()
{
$ViewModel = new ViewModel();
$form = new TestForm();
$form->get('submit')->setValue('Add');
$request = $this->getRequest();
if ($request->isPost())
{
$TestFilter = new TestFilter();
$test = $this->getServiceLocator()->get('Test');
$form->setInputFilter($TestFilter->getInputFilter());
$form->setData($request->getPost());
if ($form->isValid())
{
$test->populate($form->getData());
$this->getEntityManager()->persist($test);
$this->getEntityManager()->flush();
$TestDetail = $this->getServiceLocator()->get('TestDetail');
$TestDetail->populate($form->getData());
$TestDetail->setTest($test);
$this->getEntityManager()->persist($TestDetail);
$this->getEntityManager()->flush();
return $this->redirect()->toRoute('test');
}
}
return array('form' => $form);
}
My Entities are as Follows
<?php
namespace Test\Entity;
use Doctrine\ORM\Mapping as ORM;
use Zend\Form\Annotation;
use Test\Entity\Test;
/**
* An Test entity.
*
* @ORM\Entity
* @ORM\Table(name="testdetail")
*
* @property int $id
* @property string $fname
* @property string $lname
* @property string $description
* @property datetime $creation_date
* @property datetime $modification_date
*
* @Annotation\Name("Test_Detail")
*
*/
class TestDetail
{
/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*
* @Annotation\Required(true)
*/
protected $first_name;
/**
* @ORM\Column(type="string")
*
* @Annotation\Required(true)
*/
protected $last_name;
/**
* @ORM\Column(type="string")
*
* @Annotation\Required(true)
*/
protected $description;
/**
* @ORM\ManyToOne(targetEntity="TestDetail", inversedBy="test_details")
*
* @Annotation\Required(true)
*/
protected $test;
public function populate($data)
{
$this->id = isset($data['id']) ? $data['id'] : $this->id;
$this->first_name = isset($data['first_name']) ? $data['first_name'] : $this->first_name;
$this->last_name = isset($data['last_name']) ? $data['last_name'] : $this->last_name;
$this->description = isset($data['description']) ? $data['description'] : $this->description;
}
/*
* Constructor
*/
public function __construct()
{
$now = new \DateTime("now");
$this->modification_date = $now;
}
/**
* Magic getter to retrieve protected properties.
*
* @param string $property
*/
public function __get($property)
{
return $this->$property;
}
/**
* Magic setter to save protected properties.
*
* @param string $property
* @param mixed $value
*/
public function __set($property, $value)
{
$this->$property = $value;
}
public function setTest(Test $test)
{
$this->test = $test;
}
}
?>
<?php
namespace Test\Entity;
use Doctrine\ORM\Mapping as ORM;
use Zend\Form\Annotation;
/**
* An Test entity.
*
* @ORM\Entity
* @ORM\Table(name="test")
*
* @property int $id
* @property string $name
* @property string $address
* @property smallint $status
* @property datetime $creation_date
* @property datetime $modification_date
*
* @Annotation\Name("Test")
*
*/
class Test
{
/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*
* @Annotation\Required(true)
*/
protected $name;
/**
* @ORM\Column(type="string")
*
* @Annotation\Required(true)
*/
protected $status;
/**
* @ORM\Column(type="datetime")
*
* @Annotation\Required(false)
*/
protected $creation_date;
/**
* @ORM\Column(type="datetime")
*
* @Annotation\Required(false)
*/
protected $modification_date;
/**
* @ORM\OneToMany(targetEntity="TestDetail", mappedBy="test", orphanRemoval=true)
*
* @Annotation\Required(false)
*/
protected $test_details;
public function populate($data) {
$this->id = isset($data['id']) ? $data['id'] : $this->id;
$this->name = isset($data['name']) ? $data['name'] : $this->name;
$this->status = isset($data['status']) ? $data['status'] : $this->status;
}
/*
* Constructor
*/
public function __construct()
{
$now = new \DateTime("now");
$this->creation_date = $now;
$this->modification_date = $now;
}
/**
* Magic getter to retrieve protected properties.
*
* @param string $property
*/
public function __get($property)
{
return $this->$property;
}
/**
* Magic setter to save protected properties.
*
* @param string $property
* @param mixed $value
*/
public function __set($property, $value)
{
$this->$property = $value;
}
}
I am getting this error after Flush
Found entity of type Test\Entity\Test on association Test\Entity\TestDetail#test, but expecting Test\Entity\TestDetail
/**
* @ORM\ManyToOne(targetEntity="Test", inversedBy="test_details")
*
* @Annotation\Required(true)
*/
protected $test;
As you are referring Test entity your target entity should be Test. Try above mention code and tell me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With