У меня есть вопрос относительно Учения и сущностей на Symfony 2.3.Doctrine2: вызов флеша несколько раз
Согласно «Документация книги» раздел «Базы данных и Doctrine> Сохранение связанных сущностей» (проверить пример здесь: http://symfony.com/doc/current/book/doctrine.html) пример создает simultaneusly новую строку в обоих продуктов и категории таблиц и ассоциированных компаний product.category_id значение с «id» элемента новой категории.
Проблема в том, что Action Controller создает новый продукт и новую категорию в любое время, когда он вызывается!
Для того, чтобы просто создать новый продукт и связать его CATEGORY_ID с существующей категорией идентификатором (я сделал тест передачи параметров через URL, как это:/веб/магазин/создать/NewProduct/Kayak/)
это routing.yml маршрут
acme_store_create_product_by_category:
path: /create/newproduct/{name}/{categoryId}
defaults: { _controller: AcmeStoreBundle:Default:createProduct }
я сделал что-то вроде этого, который, кажется, работает нормально:
public function createProductAction($name, $categoryId)
{
$em = $this->getDoctrine()->getManager();
if ($em->getRepository("AcmeStoreBundle:Category")->findOneById($categoryId)) {
$product = new Product();
$product->setName($name);
$product->setPrice(220);
$product->setDescription("This is just a test");
$em->persist($product);
$em->flush();
$newproduct = $em->getRepository("AcmeStoreBundle:Product")->find($product->getId());
/** Create new product and populate $newproduct with its data */
$repository = $em->getRepository("AcmeStoreBundle:Category")->find($categoryId);
$newproduct->setCategory($repository);
$em->persist($newproduct);
$em->flush();
/** Update the id_category field of the new product with parameter $categoryId */
//exit(\Doctrine\Common\Util\Debug::dump($product));
return new Response('Create product ' . $name . ' with category id ' . $categoryId);
} else {
return new Response('It doesn\'t exists any category with id ' . $categoryId);
}
}
Мое сомнение в этом случае: хорошо ли прибегать к методу flush() два раза в одном и том же действии? В этом случае я хотел бы создать новый продукт, выбрав соответствующую категорию из «списка».
Спасибо заранее!
Спасибо большое Francesco :-)! В настоящее время я прилагаю большие усилия, чтобы переключиться на Entities-подобный подход и ORM. Это довольно далеко от методов библиотек PDO или mysqli. Да, пример, который я опубликовал, был просто моим любопытством, строго связанным с примером в книге документации по Symfony, а не с реальным применением, конечно :-) В любом случае, это очень полезно для вашего совета! Я собираюсь реализовать его в своем тестовом коде, чтобы иметь в виду будущие случаи. –
Рад, что это помогло @FabrizioSabato :-) Вы ищете какую-либо другую информацию? Я спрашиваю, потому что я не уверен, что это полностью отвечает на ваш вопрос. Вероятно, это лучше всего изменить название вопроса, чтобы это было полезно для пользователей, поступающих из поисковых систем.Что-то вроде «Doctrine2: многократный вызов флеша»? –
Ну, теперь я читаю некоторую документацию о связанных с ними веб-формах и beahviours. Я почти уверен, что это принесет дополнительную информацию, и я буду очень рад поделиться этим обсуждением. Хорошо, по твоему совету я изменю название. –