2014-01-26 60 views
0

我解釋我的問題,問我的英文抱歉! 我有2個實體:項目和操作。每個項目可以有更多的操作,每個操作可以有不同的價格。 所以,我創建了一個新的實體ProgettoOperazionePrezzo保存在2個oneToMany關係的數據庫實體

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 


/** 
* @var float 
* 
* @ORM\Column(name="prezzo", type="decimal") 
*/ 
private $prezzo; 


/** 
* Get id 
* 
* @return integer 
*/ 
public function getId() 
{ 
    return $this->id; 
} 

/** 
* Set prezzo 
* 
* @param float $prezzo 
* @return ProgettoOperazionePrezzo 
*/ 
public function setPrezzo($prezzo) 
{ 
    $this->prezzo = $prezzo; 

    return $this; 
} 

/** 
* Get prezzo 
* 
* @return float 
*/ 
public function getPrezzo() 
{ 
    return $this->prezzo; 
} 


/** 
* @ORM\ManyToOne(targetEntity="Progetto") 
* @ORM\JoinColumn(name="progetto_id", referencedColumnName="id") 
**/ 
private $progetto; 

/** 
* Set progetto 
* 
* @param \Management\ProgettiBundle\Entity\Progetto $progetto 
* @return ProgettoOperazionePrezzo 
*/ 
public function setProgetto(\Management\ProgettiBundle\Entity\Progetto $progetto = null) 
{ 
    $this->progetto = $progetto; 

    return $this; 
} 

/** 
* Get progetto 
* 
* @return \Management\ProgettiBundle\Entity\Progetto 
*/ 
public function getProgetto() 
{ 
    return $this->progetto; 
} 

/** 
* @ORM\ManyToOne(targetEntity="Operazione") 
* @ORM\JoinColumn(name="operazione_id", referencedColumnName="id") 
**/ 
private $operazione; 

/** 
* Set operazione 
* 
* @param \Management\ProgettiBundle\Entity\Operazione $operazione 
* @return ProgettoOperazionePrezzo 
*/ 
public function setOperazione(\Management\ProgettiBundle\Entity\Operazione $operazione = null) 
{ 
    $this->operazione = $operazione; 

    return $this; 
} 

/** 
* Get operazione 
* 
* @return \Management\ProgettiBundle\Entity\Operazione 
*/ 
public function getOperazione() 
{ 
    return $this->operazione; 
} 

現在我想建立一個形式數據庫來保存所有的,我選擇了與checkbutton的操作。

$operazione = new ProgettoOperazionePrezzo(); 
    $progetto = $this->getDoctrine()->getRepository('ManagementProgettiBundle:ProgettoOperazionePrezzo')->find($id_progetto); 

    $form  = $this->createFormBuilder($operazione) 
          ->add('operazione','entity',array(
      'label'=>'Operazioni da effettuare:', 
      'multiple'=>true, 
      'expanded'=>true, 
      'class'=>'ManagementProgettiBundle:Operazione', 
      'property'=>'nome', 
      'query_builder' => function(EntityRepository $er) 
           { 
            return $er->createQueryBuilder('u') 
               ->orderBy('u.nome', 'ASC'); 
           })) 
          ->add('Passo successivo','submit'); 
    $form->handleRequest($request); 
if($form->isValid()){ 

        $em = $this->getDoctrine()->getManager(); 
        $operazione->setProgetto($progetto); 
        $em->persist($operazione); 
        $em->flush(); 

        //return $this->redirect($this->generateUrl('management_progetti_nuovo_progetto_p3',array('id_progetto'=>$id_progetto))); 

      } 

我沒有問題,展現形式......但是當我嘗試在數據庫中保存我的選擇,因爲它給我這個錯誤是dwsnt工作:

Catchable Fatal Error: Argument 1 passed to Management\ProgettiBundle\Entity\ProgettoOperazionePrezzo::setOperazione() must be an instance of Management\ProgettiBundle\Entity\Operazione, instance of Doctrine\Common\Collections\ArrayCollection given, called in D:\xampp\htdocs\alemanno_management\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php on line 345 and defined in D:\xampp\htdocs\alemanno_management\src\Management\ProgettiBundle\Entity\ProgettoOperazionePrezzo.php line 108

我是什麼做錯了?!!?也許所有??請...請告訴我,我該如何解決這個問題?

回答

0

由於您從數據庫中獲取多個結果,因此您的$progetto變量將包含ArrayCollection的一個實例,您應該在其上迭代該實例。因爲您的查詢包含這應該是唯一的一個ID,我假設你想獲取只有一個結果:

$progetto = $this->getDoctrine()->getRepository('ManagementProgettiBundle:ProgettoOperazionePrezzo')->findOneBy(array('id' => $id_progetto)); 

現在你$progetto變量應該指向的Management\ProgettiBundle\Entity\Operazione一個實例。

0

嘗試使用下一個實體,請:

/** 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 


/** 
* @var float 
* 
* @ORM\Column(name="prezzo", type="decimal") 
*/ 
private $prezzo; 


/** 
* Get id 
* 
* @return integer 
*/ 
public function getId() 
{ 
    return $this->id; 
} 

/** 
* Set prezzo 
* 
* @param float $prezzo 
* @return ProgettoOperazionePrezzo 
*/ 
public function setPrezzo($prezzo) 
{ 
    $this->prezzo = $prezzo; 

    return $this; 
} 

/** 
* Get prezzo 
* 
* @return float 
*/ 
public function getPrezzo() 
{ 
    return $this->prezzo; 
} 


/** 
* @ORM\ManyToOne(targetEntity="Progetto") 
* @ORM\JoinColumn(name="progetto_id", referencedColumnName="id") 
**/ 
private $progetto; 


/** 
* Set progetto 
* 
* @param \Management\ProgettiBundle\Entity\Progetto $progetto 
* @return ProgettoOperazionePrezzo 
*/ 
public function setProgetto(\Management\ProgettiBundle\Entity\Progetto $progetto = null) 
{ 
    $this->progetto = $progetto; 

    return $this; 
} 

/** 
* Get progetto 
* 
* @return \Management\ProgettiBundle\Entity\Progetto 
*/ 
public function getProgetto() 
{ 
    return $this->progetto; 
} 

public function __construct() { 
    $this->operazione = new \Doctrine\Common\Collections\ArrayCollection(); 
} 

/** 
* @ORM\ManyToOne(targetEntity="Operazione") 
* @ORM\JoinColumn(name="operazione_id", referencedColumnName="id") 
**/ 
private $operazione; 

/** 
* Set operazione 
* 
* @param \Doctrine\Common\Collections\ArrayCollection $operazione 
* @return ProgettoOperazionePrezzo 
*/ 
public function setOperazione(\Doctrine\Common\Collections\ArrayCollection $operazione = null) 
{ 
    $this->operazione = $operazione; 

    return $this; 
} 

/** 
* Get operazione 
* 
* @return \Doctrine\Common\Collections\ArrayCollection 
*/ 
public function getOperazione() 
{ 
    return $this->operazione; 
} 
相關問題