私はWebサービスを行うためにFos_restを使用しています。 JSONのAngular Appからエンティティを受け取っています。 JSON例:symfonyエンティティマネージャに既存のサブエンティティを認識させるにはどうすればよいですか?
{"model":
{
"trademark":
{"id":1,"name":"Alfa Romeo"},
"type":
{"id":1,"code":"car","name":"Car"},
"name":"147"
}
}
エンティティは、「商標」と「タイプ」と呼ばれる2つのサブエンティティ、から構成されています。
POSTを受信すると、コントローラに以下のん:フラッシュを行うとき、それは新しいエンティティとして「商標」と「タイプ」を認識するので、これらはすでに存在しているので、所有しているとき
public function cpostAction(Request $request, $idTrademark)
{
$entity = new Model();
$form = $this->createForm(ModeloType::class, $entity);
$form->handleRequest($request);
if ($form->isValid()) {
$entity = $form->getData();
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
/*do things with the entity and return*/
}
}
問題は、与えられました"id"。 エンティティマネージャがエンティティ "trademark"と "type"をデータベースから認識するようにするにはどうすればよいですか?
P.S: フォームタイプ:
class ModelType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name')
->add('trademark', TrademarkType::class)
->add('type', TypeType::class)
->add('id');
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Model',
'csrf_protection' => false,
'allow_extra_fields' => true,
));
}
}
にIDを変換するために使用すべきです、$ entity-> getTrademark() - > getId())); $ entity-> setType($ em-> find(Type :: class、$ entity-> getType() - > getId())); – Niko
findを実行すべきではありません。データベース要求を行います。 '$ em-> getReference(Type :: class、$ entity-> getType() - > getId())' – goto
をお勧めします。ありがとう! – Niko