2014-03-27 34 views
0

這裏行的ID是我的代碼:的Symfony2 /學說 - 獲取其即將被插入

$cost = new Cost(); 

if(some_condition){ 
    $cost->setColumn1('some_value'); 
} else if(some_condition){ 
    $cost->setColumn2('some_value'); 

    /**How do I get the ID of the cost row that is about to be inserted here**/ 

} else if(some_condition){ 
    $cost->setColumn3('some_value'); 
} 

$em->persist($cost); 
$em->flush(); 

我想這樣做的:

$cost = new Cost(); 

    if(some_condition){ 
     $cost->setColumn1('some_value'); 
    } else if(some_condition){ 
     $cost->setColumn2('some_value'); 
     $em->persist($cost); 
     $em->flush(); 

     /**How do I get the ID of the cost row that is about to be inserted here**/ 
     $cost->getId(); 

    } else if(some_condition){ 
     $cost->setColumn3('some_value'); 
    } 

    $em->persist($cost); 
    $em->flush(); 

但由於成本$對象堅持和衝兩次,這行不會被插入兩次?我該如何解決這個問題?有沒有更聰明的方法來做到這一點?

回答

0

試試這個和解決您的問題

$cost = new Cost(); 

if(some_condition){ 
    $cost->setColumn1('some_value'); 
    $em->persist($cost); 
} else if(some_condition){ 
    $cost->setColumn2('some_value'); 
    $em->persist($cost); 
    /**How do I get the ID of the cost row that is about to be inserted here**/ 
    $cost->getId(); 

} else if(some_condition){ 
    $cost->setColumn3('some_value'); 
    $em->persist($cost); 
} 
$em->flush(); 
+0

成本表中的id字段是自動遞增的。所以除非數據被插入到數據庫中,否則id不可用。 – aBhijit

0

,你出的第二個示例代碼是好的,只是刪除從到底$ EM->堅持($費用)調用,你只需要堅持它一旦。 Doctrine非常聰明,可以在第二次刷新時發現$ cost實體已經保存了一次,並且它只會更新已更改的字段(在您的案例中爲column3)。

你可以再進一步,你可以將$ cost傳遞給第一次刷新,所以使用$ em-> flush($ cost),它只會刷新那一個對象,而不是其他刷新對象。其他物體將在最後通過同花順的呼叫處理。

+0

最近一次刷新不會再次插入成本行 – aBhijit

+0

或者它只會更新前一次刷新的第3列值 – aBhijit

+0

它不會,不會。嘗試一下。 –