我正在使用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想出这一个!帮助
答案 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。