LoginSignup
2
2

More than 5 years have passed since last update.

Doctrine ORM で @Version カラムを使用するにはカラム定義に "default 1" が必要

Last updated at Posted at 2016-01-24

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;
            }
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2