私はTasks.taskestadoからEstados.estadoまでの外部キーを持つ "Estados"テーブルを参照する "Tasks"テーブルを持っています。ここでsymfony3:多対1の関係を持つ列を持つエンティティのフォームを作成する
は、タスクに関連するXMLマッピングです:
<entity name="AppBundle\Entity\Tasks" table="TASKS" repository-class="AppBundle\Repository\TasksRepository">
<id name="taskid" type="bigint" column="TaskID">
<generator strategy="IDENTITY"/>
</id>
...
<many-to-one field="taskestado" target-entity="Estados" fetch="LAZY">
<join-columns>
<join-column name="TaskEstado" referenced-column-name="Estado"/>
</join-columns>
</many-to-one>
...
そしてEstados用:
<entity name="AppBundle\Entity\Estados" table="ESTADOS">
<id name="estado" type="string" column="Estado" length="15">
<generator strategy="IDENTITY"/>
</id>
<field name="estadodescricao" type="string" column="EstadoDescricao" length="50" nullable="true">
<options>
<option name="fixed"/>
</options>
</field>
...
はこのことを考えると、私は、タスクを作成するためのアクション(novaActionを())を作成しようとしています。 「empty_data」オプションがそれにタスクのインスタンスを渡さずにフォームを作成しようとした
class TasksType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('taskid', HiddenType::class)
...
#->add('taskestado')
->add('taskestado', EntityType::class, [ 'class' => 'AppBundle:Estados' ])
...
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Tasks',
#'empty_data' => function (\Symfony\Component\Form\FormInterface $form) {
# #return new Tasks($form->get('tasks')->getData());
# return new Tasks();
#},
));
}
}
:
public function novaAction(Request $request)
{
$task = new Tasks();
$em = $this->getDoctrine()->getManager();
dump($task);
#$task->setTaskEstado(new Estados());
$form = $this->createForm(TasksType::class, $task);
$form->handleRequest($request);
if ($form->isSubmitted()) {
if ($form->isValid()) {
// Criar a tarefa na BD
$em->persist($form->getData());
$em->flush();
$this->addFlash('notice', 'app.nova_tarefa.mensagem_sucesso');
return $this->redirectToRoute('nova_tarefa');
}
$this->addFlash('error', 'app.nova_tarefa.mensagem_erro');
}
、関連TasksTypeコード: はここにコントローラー・コードです。 また、taskestadoをコメント付きのコードで追加すると同じ結果になります。すなわち、引数なし。
そして、ここでは関係タスクエンティティです:私は、ページを開くと
namespace AppBundle\Entity;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Tasks
*/
class Tasks
{
/**
* @var integer
*/
protected $taskid;
/**
* @var \AppBundle\Entity\Estados
*/
protected $taskestado;
...
/**
* Get taskid
*
* @return integer
*/
public function getTaskid()
{
return $this->taskid;
}
/**
* Set taskestado
*
* @param \AppBundle\Entity\Estados $taskestado
*
* @return Tasks
*/
public function setTaskestado(\AppBundle\Entity\Estados $taskestado = null)
{
$this->taskestado = $taskestado;
return $this;
}
/**
* Get taskestado
*
* @return \AppBundle\Entity\Estados
*/
public function getTaskestado()
{
return $this->taskestado;
}
...
}
、私は次のエラーを取得する:
Entities passed to the choice field must be managed. Maybe persist them in the entity manager?
ように、私はまた、CRUD(bin/console doctrine:generate:crud --filter=Tasks
)を生成したいです私はそれがどのように行われたかを確認することができますが、コードは似ていますが、結果は(いくつかのdatetime列のTasksTypeのいくつかの問題を修正した後)です。
私は間違っていますか?
'task'エンティティに' taskestado'を自動的に初期化するコードがありますか? – xabbuh
mblaettermannのコードを追加する前に、私も__construct()関数を持っていませんでした。 –
それにもかかわらず、そのエンティティクラスのコードを表示できますか? – xabbuh