Frage Doctrine und zusammengesetzte eindeutige Schlüssel


Ich möchte einen einzigartigen zusammengesetzten Schlüssel in der Lehre machen. Das sind meine Felder:

 /**
     * @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;

Wie kann ich die Doktrin zeigen, dass diese zusammen einen zusammengesetzten eindeutigen Schlüssel darstellen?


76
2017-09-28 14:11


Ursprung


Antworten:


Beantworte die Frage:

use Doctrine\ORM\Mapping\UniqueConstraint;

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

Sehen @Einzigartige Beschränkung


159
2017-09-29 07:57



Ich finde es etwas wortreicher use nur ORM und dann Präfix ORM in Anmerkungen. Beachten Sie auch, dass Sie die Anmerkung auf mehrere Zeilen aufteilen können, um sie lesbarer zu machen, insbesondere wenn Sie mehrere Elemente erwähnen müssen (Index im folgenden Beispiel).

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



Ich weiß, dass dies eine alte Frage ist, aber ich habe sie bei der Suche nach einer Möglichkeit gefunden, Composite PK zu erstellen und dachte mir, dass sie ein Update verwenden könnte.

Die Dinge sind eigentlich viel einfacher, wenn Sie einen zusammengesetzten Primärschlüssel benötigen. (Was natürlich Einzigartigkeit garantiert) Doktrin Dokumentation enthält einige nette Beispiele von dieser URL: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

Das ursprüngliche Beispiel könnte also ungefähr so ​​aussehen:

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

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

Ein paar Hinweise hier:

  1. Die Spalte "name" wird weggelassen, da Doctrine sie basierend darauf erraten kann der Name der Eigenschaft
  2. Schon seit videoDimension und videoBitrate sind beide Teile des PK - es gibt keine Notwendigkeit zu spezifizieren nullable = false
  3. Bei Bedarf kann das Composite PK aus Fremdschlüsseln bestehen. Fügen Sie daher einige relationale Zuordnungen hinzu

1
2018-06-08 18:37