下拉列表未显示文章类别

时间:2017-12-03 11:44:03

标签: php symfony doctrine-orm

我正在使用symfony构建一个网站。我正在尝试获取一个页面来显示带有嵌套对象的表单。 Artikel只有一个类别。有许多artikels和许多类别。

/**
 * Artikel
 *
 * @ORM\Table(name="artikel", indexes=
    {@ORM\Index(name="IDX_A4375C338C9B60D8", columns={"idartikeltype"})})
 * @ORM\Entity
 */
class Artikel
{
....
/**
 * @ORM\Column(type="integer")
 *
 */
private $idartikeltype;

/**
 * @var ArtikelCategory
 * @ORM\ManyToOne(targetEntity="AppBundle\Entity\ArtikelCategory"
   ,inversedBy="type")
 * @ORM\JoinColumn(name="idartikeltype", 
   referencedColumnName="idartikeltype")
 */
private $category;

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

......

我的班级ArtikelCategory

class ArtikelCategory
{
/**
 * @var string
 * /**
 * @ORM\OneToMany(targetEntity="AppBundle\Entity\Artikel", 
mappedBy="category",cascade={ALL})
 *
 * @ORM\Column(name="type", type="string", length=45, nullable=false)
 */
private $type;

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

/**
 * @return string
 */
public function getType()
{
    return $this->type;
}

/**
 * @param string $type
 */
public function setType($type)
{
    $this->type = $type;
}

/**
 * @return int
 */
public function getIdartikeltype()
{
    return $this->idartikeltype;
}

/**
 * @param int $idartikeltype
 */
public function setIdartikeltype($idartikeltype)
{
    $this->idartikeltype = $idartikeltype;
}

public function __toString() {

    return $this->getType()
        ;


}


public function __construct(){
    $this->type = new ArrayCollection();
}
}

ArtikelType

public function buildForm
( FormBuilderInterface $builder , array 
    $options 
        )
        {
           $builder
        ->add ('titel', TextType::class,array('label'=>'Titel'))

        ->add('datum',DateType::class,array('label'=>'Date'))

        ->add('category' , 

  EntityType::class,array
('class'=>\AppBundle\Entity\ArtikelCategory::class,'label'=>'Page',
            'query_builder'=>function(EntityRepository $er){ return $er-
>createQueryBuilder('t')->orderBy('t.type','ASC');}


        ))

        ->add('tekst',CKEditorType::class,array('label'=>'Text'))

        ->add('save',SubmitType::class,array('label'=>'Save item'))
        ;



}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array('data_class'=>'AppBundle\Entity\Artikel',));
} 

InputController

$item = $this-> getDoctrine()->getRepository(Artikel::class)->find($id);


    $form = $this->createForm(ArtikelType::class, $item);

    $form->handleRequest($request);

    if($form->isSubmitted() && $form -> isValid())
    {


        $em= $this->getDoctrine()->getManager();

        $em->persist($item);
        $em->flush();
       return $this->redirectToRoute('input');

    }

    return $this->render('input/input.html.twig', array('form'=>$form->createView(),));

通常情况下,下拉列表应显示数据库中的artikel类别,但是......

...在我的表单中,下拉列表没有显示artikel的类别,当我持有artikel时,新类别不会被保存。

Icant想出这一个!帮助

2 个答案:

答案 0 :(得分:0)

您的注释不正确。删除ArtikelCategory :: type上的@ORM \ Column注释。接下来添加一个__toString()方法,该方法返回实体的文本表示。在formType中首先删除所有选项。只需使用-->add('category')请完整按照教学手册的Association Mapping章节中的示例,只在注释中添加@ \ ORM 前缀。

更改后,使用

将其更新到数据库
bin/console doctrine:schema:update --force

并使用

检查映射是否正确
bin/console doctrine:schema:validate

答案 1 :(得分:0)

Mea Culpa,当我读到Association Mapping 时,它让我思考。现在我知道我正在使用多对一单向关联。 其余的都是小菜一碟......

THX。