PostgreSQLとMySqlで、persistした後のidが取得できるタイミングが違ってたのでメモ。
サンプル
Order.php
/**
* Order
*/
class Order extends \Eccube\Entity\AbstractEntity
{
/**
* @var integer
*/
public $order_id;
/**
* @var integer
*/
public $total;
...
order.dcm.yml
Eccube\Entity\Order:
type: entity
table: dtb_order
id:
order_id:
type: integer
nullable: false
unsigned: false
id: true
generator:
strategy: AUTO
fields:
total:
type: integer
nullable: true
テストコード
$Order = new Order();
$Order->setTotal(100);
$app['orm.em']->persist($Order);
$id1 = $Order->getOrderId();
var_dump($id1);
$app['orm.em']->flush();
$id2 = $Order->getOrderId();
var_dump($id2);
Mysqlの場合
NULL
int(1)
PostgreSQLの場合
int(1)
int(1)
のようになりました。
PostgreSQLだとpersistのタイミングでIDを取得できるようです。
シーケンスとオートインクリメントの違いかな。