Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot flush data into child Table using doctrine

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
like image 973
noobie-php Avatar asked Oct 04 '22 19:10

noobie-php


1 Answers

/**
 * @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.

like image 117
StormMan Avatar answered Oct 10 '22 01:10

StormMan