簡體   English   中英

用2個oneToMany關系保存在數據庫實體中

[英]Saving in database entity with 2 oneToMany relationship

我解釋我的問題,對不起我的英語! 我有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)));

             }

我沒有問題可以顯示表格...但是當我嘗試將其保存在數據庫中時,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

我在做什么錯?!??可能是全部?請……您能告訴我如何解決此問題?!

因為您從數據庫中獲取多個結果,所以$progetto變量將包含ArrayCollection的實例,您應該在該實例上進行迭代。 因為您的查詢包含一個唯一的ID,所以我假設您只想獲取一個結果:

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

現在,您的$progetto變量應指向Management\\ProgettiBundle\\Entity\\Operazione的實例。

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

/**
 * @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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM