2013-06-19 13 views
5

Di seguito è riportato il mio snippet di codice, quello che sto cercando di fare è inserire l'ID della tabella padre nella tabella figlio insieme all'inserimento di dati nella tabella figlio allo stesso tempo. Di seguito è riportato il mio codice SnippetImpossibile scaricare dati nella tabella figlio utilizzando doctrine

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); 
} 

mie Entità sono le seguenti

<?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; 
} 




} 

sto ottenendo questo errore dopo Flush

Found entity of type Test\Entity\Test on association Test\Entity\TestDetail#test, but expecting Test\Entity\TestDetail 

risposta

3
/** 
* @ORM\ManyToOne(targetEntity="Test", inversedBy="test_details") 
* 
* @Annotation\Required(true) 
*/ 
protected $test; 

Come si fa riferimento entità prova la tua entità di destinazione dovrebbe essere Test. Prova sopra il codice di menzione e dimmi.

+0

Testato e verificato, questo è stato al 1 ° anno dopo ho scelto il punto mi riferivo allo stesso tavolo. –

1

Guarda TestDetails proprietà :: prova

/** 
* @ORM\ManyToOne(targetEntity="TestDetail", inversedBy="test_details") 
* 
* @Annotation\Required(true) 
*/ 
protected $test; 

si sta definendo l'entità di destinazione yo essere TestDetail (stessa classe), mentre si passa un'istanza di prova per TestDetails :: settest()

Problemi correlati