保存具有2个Onetomany关系的数据库实体



我解释了我的问题,问我的英语!我有两个实体:项目和操作。每个项目都可以进行更多的操作,每个操作都可以具有不同的价格。因此,我创建了一个新的实体progeteTooperazioneprezzo

/**
 * @var integer
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var float
 *
 * @ORMColumn(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;
}

 /**
 * @ORMManyToOne(targetEntity="Progetto")
 * @ORMJoinColumn(name="progetto_id", referencedColumnName="id")
 **/
private $progetto;
/**
 * Set progetto
 *
 * @param ManagementProgettiBundleEntityProgetto $progetto
 * @return ProgettoOperazionePrezzo
 */
public function setProgetto(ManagementProgettiBundleEntityProgetto $progetto = null)
{
    $this->progetto = $progetto;
    return $this;
}
/**
 * Get progetto
 *
 * @return ManagementProgettiBundleEntityProgetto 
 */
public function getProgetto()
{
    return $this->progetto;
}
/**
 * @ORMManyToOne(targetEntity="Operazione")
 * @ORMJoinColumn(name="operazione_id", referencedColumnName="id")
 **/
private $operazione;
/**
 * Set operazione
 *
 * @param ManagementProgettiBundleEntityOperazione $operazione
 * @return ProgettoOperazionePrezzo
 */
public function setOperazione(ManagementProgettiBundleEntityOperazione $operazione = null)
{
    $this->operazione = $operazione;
    return $this;
}
/**
 * Get operazione
 *
 * @return ManagementProgettiBundleEntityOperazione 
 */
public function getOperazione()
{
    return $this->operazione;
}

现在,我想创建一个表单以保存在数据库中的所有操作中我选择的所有操作。

 $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 ManagementProgettiBundleEntityProgettoOperazionePrezzo::setOperazione() must be an instance of ManagementProgettiBundleEntityOperazione, instance of DoctrineCommonCollectionsArrayCollection given, called in D:xampphtdocsalemanno_managementvendorsymfonysymfonysrcSymfonyComponentPropertyAccessPropertyAccessor.php on line 345 and defined in D:xampphtdocsalemanno_managementsrcManagementProgettiBundleEntityProgettoOperazionePrezzo.php line 108

我在做什么错?!

,因为您从数据库中获取了多个结果,因此您的$progetto变量将包含一个arrayCollection的实例,您应该在其上迭代。因为您的查询包含一个应该是唯一的ID,所以我认为您只想获取一个结果:

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

现在您的$progetto变量应指向ManagementProgettiBundleEntityOperazione的实例。

尝试使用下一个实体,请:

/**
 * @var integer
 *
 * @ORMColumn(name="id", type="integer")
 * @ORMId
 * @ORMGeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var float
 *
 * @ORMColumn(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;
}

 /**
 * @ORMManyToOne(targetEntity="Progetto")
 * @ORMJoinColumn(name="progetto_id", referencedColumnName="id")
 **/
private $progetto;

/**
 * Set progetto
 *
 * @param ManagementProgettiBundleEntityProgetto $progetto
 * @return ProgettoOperazionePrezzo
 */
public function setProgetto(ManagementProgettiBundleEntityProgetto $progetto = null)
{
    $this->progetto = $progetto;
    return $this;
}
/**
 * Get progetto
 *
 * @return ManagementProgettiBundleEntityProgetto 
 */
public function getProgetto()
{
    return $this->progetto;
}
public function __construct() {
    $this->operazione = new DoctrineCommonCollectionsArrayCollection();
}
/**
 * @ORMManyToOne(targetEntity="Operazione")
 * @ORMJoinColumn(name="operazione_id", referencedColumnName="id")
 **/
private $operazione;
/**
 * Set operazione
 *
 * @param DoctrineCommonCollectionsArrayCollection $operazione
 * @return ProgettoOperazionePrezzo
 */
public function setOperazione(DoctrineCommonCollectionsArrayCollection $operazione = null)
{
    $this->operazione = $operazione;
    return $this;
}
/**
 * Get operazione
 *
 * @return DoctrineCommonCollectionsArrayCollection 
 */
public function getOperazione()
{
    return $this->operazione;
}

相关内容

  • 没有找到相关文章

最新更新