簡體   English   中英

Symfony 3.4-EntityType無法與關系數據庫一起使用

[英]Symfony 3.4 - EntityType not working with relational database

這是我的第一個話題,如果我寫錯了什么,對不起。

我正在用Symfony 3.4編寫代碼,我想創建一個表格,讓我從數據庫中選擇Category,並創建與此類別相關的新Type。 在建立數據庫之間的關系之前,一切正常。

我花了幾個小時研究如何建立這種關系,下面是我的代碼,但是我找不到如何將其實現到表單的方法。 我仍然遇到錯誤。 大多:

An exception occurred while executing 'INSERT INTO typWydatku (kategoria, grupa) VALUES (?, ?)' with params [null, "Jedzenie_miasto"]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'kategoria' cannot be null

這是代碼:

控制器:

/**
 * @Route(
 *      "/dodajTypWydatku",
 *      name="milo_budzet_dodajTypWydatku"
 * )
 * 
 * @Template
 */
public function dodajTypWydatku(Request $Request) {

    $dodajTypWydatku = new Entity\dodajTypWydatku();

    $form = $this->createForm(Type\dodajTypWydatkuType::class, $dodajTypWydatku);

    $form->handleRequest($Request);

    $Session = $this->get('session');

    if($Request->isMethod('POST')) {
        if($form->isSubmitted() && $form->isValid()){

            $em = $this->getDoctrine()->getManager();
            $em->persist($dodajTypWydatku);
            $em->flush();

            $Session->getFlashBag()->add('success', 'Zgłoszenie zostało zapisane');

            return $this->redirect($this->generateUrl('milo_budzet_dodajTypWydatku'));

        } else {
            $Session->getFlashBag()->add('danger', 'Popraw błędy formularza');
        }
    }

    return array(
        'form' => $form->createView(),
    );
}

建造者:

class dodajTypWydatkuType extends AbstractType {

public function buildForm(FormBuilderInterface $builder, array $options) {

    $builder 
            ->add('kategoria', EntityType::class, array(
                'class' => dodajKatWydatku::class,
                'choice_label' => 'kategoria'
            ))
            ->add('grupa', formType\TextType::class)
            ->add('Zapisz', formType\SubmitType::class);

}

public function configureOptions(OptionsResolver $resolver) {
    $resolver->setDefaults(array(
        'data_class' => dodajTypWydatku::class
    ));
}

}

類型的實體:

 /**
 * @ORM\Entity
 * @ORM\Table(name="typWydatku")
 */
class dodajTypWydatku {

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

/**
 * @ORM\Column(type="integer")
 * 
 * @Assert\NotBlank
 */
private $kategoria;

/**
 * @ORM\Column(type="string", length=255)
 * 
 * @Assert\NotBlank
 */
private $grupa;

/**
 * @ORM\ManyToOne(targetEntity="dodajKatWydatku", inversedBy="grupy")
 * @ORM\JoinColumn(name="kategoria", referencedColumnName="id_kat")
 */
private $dodajKatWydatku;

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

/**
 * Set kategoria
 *
 * @param integer $kategoria
 *
 * @return dodajTypWydatku
 */
public function setKategoria($kategoria)
{
    $this->kategoria = $kategoria;

    return $this;
}

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

/**
 * Set grupa
 *
 * @param string $grupa
 *
 * @return dodajTypWydatku
 */
public function setGrupa($grupa)
{
    $this->grupa = $grupa;

    return $this;
}

/**
 * Get grupa
 *
 * @return string
 */
public function getGrupa()
{
    return $this->grupa;
}

/**
 * Set dodajKatWydatku
 *
 * @param \MiloBudzetBundle\Entity\dodajKatWydatku $dodajKatWydatku
 *
 * @return dodajTypWydatku
 */
public function setDodajKatWydatku(\MiloBudzetBundle\Entity\dodajKatWydatku $dodajKatWydatku)
{
    $this->dodajKatWydatku = $dodajKatWydatku;

    return $this;
}

/**
 * Get dodajKatWydatku
 *
 * @return \MiloBudzetBundle\Entity\dodajKatWydatku
 */
public function getDodajKatWydatku()
{
    return $this->dodajKatWydatku;
}
}

類別實體:

/**
 * @ORM\Entity
 * @ORM\Table(name="katWydatku")
 */
class dodajKatWydatku {

/**
 * @ORM\Column(type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id_kat;

/**
 * @ORM\Column(type="string", length=255)
 * 
 * @Assert\NotBlank
 */
private $kategoria;

/**
 * @ORM\OneToMany(targetEntity="dodajTypWydatku", mappedBy="dodajKatWydatku")
 */
private $grupy;


public function __toString() {
    return $this->kategoria;
}



/**
 * Get idKat
 *
 * @return integer
 */
public function getIdKat()
{
    return $this->id_kat;
}

/**
 * Set kategoria
 *
 * @param string $kategoria
 *
 * @return dodajKatWydatku
 */
public function setKategoria($kategoria)
{
    $this->kategoria = $kategoria;

    return $this;
}

/**
 * Get kategoria
 *
 * @return string
 */
public function getKategoria()
{
    return $this->kategoria;
}
/**
 * Constructor
 */
public function __construct()
{
    $this->grupy = new \Doctrine\Common\Collections\ArrayCollection();
}

/**
 * Add grupy
 *
 * @param \MiloBudzetBundle\Entity\dodajTypWydatku $grupy
 *
 * @return dodajKatWydatku
 */
public function addGrupy(\MiloBudzetBundle\Entity\dodajTypWydatku $grupy)
{
    $this->grupy[] = $grupy;

    return $this;
}

/**
 * Remove grupy
 *
 * @param \MiloBudzetBundle\Entity\dodajTypWydatku $grupy
 */
public function removeGrupy(\MiloBudzetBundle\Entity\dodajTypWydatku $grupy)
{
    $this->grupy->removeElement($grupy);
}

/**
 * Get grupy
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getGrupy()
{
    return $this->grupy;
}
}

我想這是我的愚蠢錯誤,但是我是symfony的新手,我研究了symfony.com參考資料,主義文檔,stackoverflow,但我找不到任何解決方案。 正如我說過的那樣,它在關聯數據庫之前就起作用了,但現在不是。

提前致謝。

.........................

從Hanzi進行更改后,有:

建造者:

class dodajTypWydatkuType extends AbstractType {

public function buildForm(FormBuilderInterface $builder, array $options) {

    $builder 
            ->add('dodajKatWydatku', EntityType::class, array(
                'class' => dodajTypWydatku::class,
                'choice_label' => 'dodajKatWydatku'
            ))
            ->add('grupa', formType\TextType::class)
            ->add('Zapisz', formType\SubmitType::class);

}

public function configureOptions(OptionsResolver $resolver) {
    $resolver->setDefaults(array(
        'data_class' => dodajTypWydatku::class
    ));
}

}

實體dodajTypWydatku:

/**
* @ORM\Entity
* @ORM\Table(name="typWydatku")
*/
class dodajTypWydatku {

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


/**
 * @ORM\Column(type="string", length=255)
 * 
 * @Assert\NotBlank
 */
private $grupa;

/**
 * @ORM\ManyToOne(targetEntity="dodajKatWydatku", inversedBy="grupy")
 * @ORM\JoinColumn(name="kategoria", referencedColumnName="id_kat")
 */
private $dodajKatWydatku;


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

/**
 * Set grupa
 *
 * @param string $grupa
 *
 * @return dodajTypWydatku
 */
public function setGrupa($grupa)
{
    $this->grupa = $grupa;

    return $this;
}

/**
 * Get grupa
 *
 * @return string
 */
public function getGrupa()
{
    return $this->grupa;
}

/**
 * Set dodajKatWydatku
 *
 * @param \MiloBudzetBundle\Entity\dodajKatWydatku $dodajKatWydatku
 *
 * @return dodajTypWydatku
 */
public function setDodajKatWydatku(\MiloBudzetBundle\Entity\dodajKatWydatku $dodajKatWydatku = null)
{
    $this->dodajKatWydatku = $dodajKatWydatku;

    return $this;
}

/**
 * Get dodajKatWydatku
 *
 * @return \MiloBudzetBundle\Entity\dodajKatWydatku
 */
public function getDodajKatWydatku()
{
    return $this->dodajKatWydatku;
}
}

但是我仍然做錯了事。 現在,表單顯示我選擇“ dodaj kat wydatku”,但沒有任何選項,當我保存它時沒有錯誤,但是db中的“ kategoria”列為空

dodajTypWydatku實體有類別的兩個屬性: $kategoria$dodajKatWydatku 那可能不是您想要的。

$kategoria屬性不是必需的 您可以(並且應該)將其刪除。 當您具有ManyToOne關聯時,Doctrine(Symfony的ORM)將自動找出外鍵列的類型。[1]

之后,請確保dodajTypWydatkuType添加了dodajKatWydatku字段,而不是(現在已刪除的) kategoria


[1]您甚至可以完全刪除@ORM\\JoinColum行:在這種情況下,Doctrine將創建一個名為dodajKatWydatku_id的列(基於屬性名稱),其類型為整數。

好吧,昨天我不得不放棄,因為我做不到。 今天,我再次查看它,並且在構建器中的實體類型中存在錯誤。 現在它是:

$builder 
            ->add('dodajKatWydatku', EntityType::class, array(
                'class' => dodajKatWydatku::class,
                'choice_label' => 'kategoria'
            ))
            ->add('grupa', formType\TextType::class)
            ->add('Zapisz', formType\SubmitType::class); 

它正在工作。 感謝和主題關閉。

暫無
暫無

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

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