Doctrine ORMで楽観的ロックの仕組みを利用するするために@Version
アノテーションを付与するカラムには、実テーブルのカラム定義に default 1
を設定する必要がある。(※v2.5.4時点)
例
CREATE TABLE user (
:
version integer not null default 1 -- ★★★
:
);
/**
* @Entity
* @Table(name="`user`")
*/
class User
{
/**
* @var integer
*
* @Version
* @Column(type="integer", nullable=false, options={"default":1})
*/
public $version;
というのも、
Doctrine\ORM\Persisters\Entity\BasicEntityPersister::getInsertColumnListで明示的に @Version
カラムをinsert対象から除外しており、実際のinsert文にversionカラムが含まれないため。
protected function getInsertColumnList()
{
:
foreach ($this->class->reflFields as $name => $field) {
if ($this->class->isVersioned && $this->class->versionField == $name) {
continue;
}