我解释我的问题,对不起我的英语! 我有2个实体:项目和运营。每个项目都可以有更多的操作,每个操作都可以有不同的价格。 所以,我创建了一个新实体ProgettoOperazionePrezzo
/**
* @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)));
}
我没有问题来显示表单...但是当我尝试在数据库中保存我的选择时它会工作,因为它给了我这个错误:
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 :(得分:0)
因为您从数据库中获取多个结果,所以$progetto
变量将包含一个ArrayCollection实例,您应该通过该实例进行迭代。因为您的查询包含一个唯一的ID,所以我假设您只想获取一个结果:
$progetto = $this->getDoctrine()->getRepository('ManagementProgettiBundle:ProgettoOperazionePrezzo')->findOneBy(array('id' => $id_progetto));
现在,您的$progetto
变量应指向Management\ProgettiBundle\Entity\Operazione
。
答案 1 :(得分: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;
}