Pertanyaan Kunci unik doktrin dan komposit


Saya ingin melakukan kunci unik gabungan dalam doktrin. Itu adalah bidang saya:

 /**
     * @var string $videoDimension
     *
     * @Column(name="video_dimension", type="string", nullable=false)
     */
    private $videoDimension;

    /**
     * @var string $videoBitrate
     *
     * @Column(name="video_bitrate", type="string", nullable=false)
     */
    private $videoBitrate;

Bagaimana saya bisa menunjukkan doktrin, bahwa gabungan itu adalah kunci unik gabungan?


76
2017-09-28 14:11


asal


Jawaban:


Jawab pertanyaannya:

use Doctrine\ORM\Mapping\UniqueConstraint;

/**
 * Common\Model\Entity\VideoSettings
 *
 * @Table(name="video_settings", 
 *    uniqueConstraints={
 *        @UniqueConstraint(name="video_unique", 
 *            columns={"video_dimension", "video_bitrate"})
 *    }
 * )
 * @Entity
 */

Lihat @UniqueConstraint


159
2017-09-29 07:57



Saya merasa lebih verbose use hanya ORM dan kemudian awalan ORM dalam anotasi. Juga perhatikan bahwa Anda dapat memecah anotasi ke beberapa baris agar lebih mudah dibaca terutama jika Anda memiliki beberapa item untuk disebutkan (indeks dalam contoh di bawah).

use Doctrine\ORM\Mapping as ORM;

/**
 * VideoSettings
 *
 * @ORM\Cache(usage="NONSTRICT_READ_WRITE")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\VideoSettingsRepository")
 * @ORM\Table(name="emails", uniqueConstraints={
 *      @ORM\UniqueConstraint(name="dimension_bitrate", columns={"video_dimension", "video_bitrate"})
 * }, indexes={
 *      @ORM\Index(name="name", columns={"nane"})
 * })
 */
class VideoSettings

16
2017-11-12 10:14



Saya tahu ini adalah pertanyaan lama, tetapi saya menemukannya sambil mencari cara untuk membuat PK komposit dan berpikir itu bisa menggunakan beberapa pembaruan.

Hal-hal sebenarnya jauh lebih sederhana jika yang Anda butuhkan adalah Kunci Utama Komposit. (Yang, tentu saja, menjamin keunikan) Dokumentasi doktrin berisi beberapa contoh bagus oleh url ini: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

Jadi contoh aslinya bisa terlihat seperti ini:

/**
 * @var string $videoDimension
 *
 * @ORM\Id @ORM\Column(type="string")
 */
private $videoDimension;

/**
 * @var string $videoBitrate
 *
 * @ORM\Id @ORM\Column(type="string")
 */
private $videoBitrate;

Beberapa catatan di sini:

  1. "Nama" kolom dihilangkan karena Doktrin dapat menebaknya berdasarkan nama properti
  2. Sejak videoDimension dan videoBitrate keduanya bagian dari PK - tidak perlu untuk menentukan nullable = false
  3. Jika diperlukan - PK Komposit dapat terdiri dari kunci asing, jadi silakan tambahkan beberapa pemetaan relasional

1
2018-06-08 18:37