Введите значение внешнего ключа

0

У меня есть два объекта Project и Task. Значение task_id задачи сопоставляется с идентификатором проекта. Каждый раз, создавая новую задачу для конкретного проекта, необходимо указать project_id в таблице Task. Есть ли другой способ сделать это, кроме использования скрытой формы поля ввода?

createAction of TaskController

  public function createAction(Request $request)
  {
    $entity = new Tasks();
    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

        return $this->redirect($this->generateUrl('tasks_show', array('id' => $entity->getId())));
    }

    return $this->render('TestBundle:Tasks:new.html.twig', array(
        'entity' => $entity,
        'form'   => $form->createView(),
    ));
}
  • 0
    Каждый раз, когда вы создаете новую задачу, вы также должны добавить ссылку на проект.
  • 0
    если вы используете $ task-> setProject ($ project), он будет установлен автоматически,
Показать ещё 1 комментарий
Теги:

2 ответа

0
Лучший ответ

Сначала вам нужно получить проект, который вы хотите назначить для него. Например, вы можете отправить его через Request $request затем использовать его для запроса Project Object затем назначить задачу этому объекту.

public function createAction(Request $request)
  {
    $entity = new Tasks();

    // doctrine entity manager
    $em = this->getDoctrine()->getManager();

    // get project_id from query string
    $project_id = $request->get('project_id');

    // query database for project object
    $project = $em->getRepository("TestBundle:Project")->find($project_id);

    // assign task to project object
    $entity->setProject($project);

    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

        return $this->redirect($this->generateUrl('tasks_show', array('id' => $entity->getId())));
    }

    return $this->render('TestBundle:Tasks:new.html.twig', array(
        'entity' => $entity,
        'form'   => $form->createView(),
    ));
}

Кроме того, newAction() - лучшее место для этого.

Надеюсь, это поможет.

0

Да, вызовите setProject($project) в действии контроллера, где вы обрабатываете форму

  • 0
    Я обновил свой вопрос. Можете ли вы сказать мне, где я должен добавить это?
  • 0
    @Raj Смотри ответ Motammem

Ещё вопросы

Сообщество Overcoder
Наверх
Меню