我有一個關於Symfony 2.3的學說和實體的問題。學說2:多次調用沖洗
據「參考文檔」章「數據庫和學說>保存相關實體」(查看這裏的例子:http://symfony.com/doc/current/book/doctrine.html) 的例子simultaneusly同時創建產品和類別表和同事product.category_id與價值在新行新分類項目的「id」。
問題是,操作控制器會在調用它時隨時創建一個新的Product和一個New Category!
爲了只需要創建一個新的產品及其CATEGORY_ID與現有的類ID相關聯(我通過URL做了一個試驗傳遞參數是這樣的:/網絡/存儲/創建/新品推薦/ 獨木舟/)
這是修改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);
}
}
我在這種情況下的疑問是:在同一個Action中兩次調用flush()方法是否是一個好習慣?在這種情況下,我想創建一個新的產品,從「列表框」中選擇相關類別。
預先感謝您!
非常感謝弗朗西斯:-)! 我目前正在努力開啓實體類方法和ORM。與PDO或mysqli庫方法相差甚遠。 是的,我發佈的這個例子只是我的一個好奇心,它與Symfony Documentation Book中的例子嚴格相關,當然不是真正的應用:-) 無論如何,這是非常有用的提示! 我會在我的測試代碼中執行它以便記住未來的情況 –
很高興幫助@FabrizioSabato :-)您是否在尋找其他信息?我問,因爲我不確定這完全回答你的問題。這可能是最好的改變問題標題,這對於來自搜索引擎的用戶也是有用的。像「Doctrine2:多次調用刷新」一樣? –
好吧,現在我正在閱讀一些有關它們的webforms和beahviours的文檔。我非常肯定,這將帶來更多的信息,我很樂意在此次討論中分享。好的,根據你的建議,我會改變標題。 –