我正在与Symfony建立一个网站。我正在尝试获取一个页面以显示带有嵌套对象的表单。Artikel只能有一个类别。有很多artikels和许多类别。
/**
* Artikel
*
* @ORMTable(name="artikel", indexes=
{@ORMIndex(name="IDX_A4375C338C9B60D8", columns={"idartikeltype"})})
* @ORMEntity
*/
class Artikel
{
....
/**
* @ORMColumn(type="integer")
*
*/
private $idartikeltype;
/**
* @var ArtikelCategory
* @ORMManyToOne(targetEntity="AppBundleEntityArtikelCategory"
,inversedBy="type")
* @ORMJoinColumn(name="idartikeltype",
referencedColumnName="idartikeltype")
*/
private $category;
/**
* @var integer
*
* @ORMColumn(name="idArtikel", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="IDENTITY")
*/
private $idartikel;
......
我的班级artikelCategory
class ArtikelCategory
{
/**
* @var string
* /**
* @ORMOneToMany(targetEntity="AppBundleEntityArtikel",
mappedBy="category",cascade={ALL})
*
* @ORMColumn(name="type", type="string", length=45, nullable=false)
*/
private $type;
/**
* @var integer
*
* @ORMColumn(name="idartikeltype", type="integer")
* @ORMId
* @ORMGeneratedValue(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'=>AppBundleEntityArtikelCategory::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'=>'AppBundleEntityArtikel',));
}
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弄清楚这个!帮助。
您的注释不正确。删除ArtikelCategory上的@orm 列注释::类型。接下来添加__ToString()方法,该方法返回实体的文本表示。首先,在FormType中删除所有选项。只需使用-->add('category')
,请按照所示的学说手册的关联映射章节中的示例如图所示仅添加 @ orm prepix。
更改后,将它们更新到数据库中的
bin/console doctrine:schema:update --force
并检查映射是否正确使用
bin/console doctrine:schema:validate
mea culpa,当我阅读关联映射时,它让我思考。现在,我知道我正在使用多一对一的单向协会。其余的是一块蛋糕....
thx。