0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PHPフレームワークFlow】DoctrineORMを用いてインデックスやユニーク制約を貼る方法

Posted at

初めに

Flowを使っていて、Doctrineでインデックスを貼る方法を理解していなかったので調べました。

インデックスの張り方

Doctrineには@ORM\Indexというアノテーションが用意されており、それを用いることで簡単にインデックスを張ることができます。

/**
 * @Flow\Entity
 * @ORM\Table(name="employee", indexes ={
 *     @ORM\Index(name="name_age_index", columns={"name", "age"})
 * })
 */
class Employee
{
    /**
     * @ORM\Column(type="string")
     * @var string
     */
    protected $name;

    /**
     * @ORM\Column(type="integer")
     * @var int
     */
    protected $age;
}

SHOW CREATE TABLE で確認したところ、KEY name_age_index (name,age)と記載されており、無事にインデックスが貼られていることが確認できました。

CREATE TABLE `employee` (
  `persistence_object_identifier` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `age` int NOT NULL,
  PRIMARY KEY (`persistence_object_identifier`),
  KEY `name_age_index` (`name`,`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

複合ユニーク制約を貼る

続いて、複合ユニーク制約についてです。
こちらは@ORM\UniqueConstraintアノテーションで指定できます。

/**
 * @Flow\Entity
 * @ORM\Table(name="employee", uniqueConstraints ={
 *     @ORM\UniqueConstraint(name="name_age_unique", columns={"name", "age"})
 * })
 */
class Employee
{
    /**
     * @ORM\Column(type="string")
     * @var string
     */
    protected $name;

    /**
     * @ORM\Column(type="integer")
     * @var int
     */
    protected $age;
}

こちらも無事作成されました。
(指定した名前がうまく反映されませんが、この理由は分からず、、、)

CREATE TABLE `employee` (
  `persistence_object_identifier` varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL,
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `age` int NOT NULL,
  PRIMARY KEY (`persistence_object_identifier`),
  UNIQUE KEY `UNIQ_5D9F75A15E237E06A13010B2` (`name`,`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci

終わりに

久しぶりにFlow関連の記事書きました。
Doctrine関連の理解が浅いので、もう少し学習していきたいです。

ここまで読んでいただきありがとうございました!

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?