सवाल सिद्धांत और समग्र अद्वितीय कुंजी


मैं सिद्धांत में समग्र अद्वितीय कुंजी करना चाहता हूं। वे मेरे खेत हैं:

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

मैं सिद्धांत कैसे दिखा सकता हूं, जो एक साथ मिलकर संयुक्त अद्वितीय कुंजी हैं?


76
2017-09-28 14:11


मूल




जवाब:


प्रश्न का उत्तर दो:

use Doctrine\ORM\Mapping\UniqueConstraint;

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

देख @विशेष बाधा


160
2017-09-29 07:57



सूचना के लिए धन्यवाद ~ एक नोट के रूप में, यदि आपने अपना खुद का प्रश्न हल किया है, जबकि आप तुरंत स्वीकार नहीं कर सकते हैं, तो आमतौर पर यह आपके स्वयं के उत्तर को स्वीकार करने के लिए अच्छा रूप है, इसलिए यदि लोग खोज रहे हैं, तो यह दिखाता है कि एक स्वीकार्य उत्तर है। - Rixius
क्या यह करना संभव है -ToOne संघ (विदेशी कुंजी)? - Dimitry K
मुझे पता है कि यह पुरानी पोस्ट है, लेकिन @ डिमिट्री के यह संभव है। बस आपको अपने @ORM \ JoinColumn (name = "join_table_id", संदर्भित कॉलमनाम = "आईडी", nullable = false) में कॉलम नाम का उपयोग करने की आवश्यकता है। यहां 'join_table_id' है। - herr
ध्यान दें कि आपको प्रदान करना है स्तंभ नाम, क्षेत्र के नाम नहीं। तो आपको camelCase को snake_case में परिवर्तित करना और जोड़ना होगा _id एसोसिएशन के लिए, क्योंकि इस तरह डॉक्टरेट कॉलम नाम उत्पन्न करता है। - gronostaj
YAML का उपयोग करके एक ही समस्या को हल कैसे करें? - FortuneSoldier


मुझे यह और अधिक verbose लगता है use केवल ओआरएम और फिर उपसर्ग ORM एनोटेशन में यह भी ध्यान रखें कि आप इसे अधिक पठनीय बनाने के लिए कई पंक्तियों में एनोटेशन तोड़ सकते हैं, खासकर यदि आपके पास उल्लेख करने के लिए कई आइटम हैं (नीचे दिए गए उदाहरण में अनुक्रमणिका)।

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





मुझे पता है कि यह एक पुराना सवाल है, लेकिन मैं समग्र पीके बनाने के लिए एक रास्ता तलाशते हुए आया और सोचा कि यह कुछ अपडेट का उपयोग कर सकता है।

चीजें वास्तव में बहुत सरल हैं यदि आपको जो चाहिए वह एक समग्र प्राथमिक कुंजी है। (जो, ज़ाहिर है, विशिष्टता की गारंटी देता है) सिद्धांत दस्तावेज में इस यूआरएल द्वारा कुछ अच्छे उदाहरण हैं: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/composite-primary-keys.html

तो मूल उदाहरण इस तरह कुछ दिख सकता है:

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

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

यहां कुछ नोट्स:

  1. कॉलम "नाम" छोड़ा जाता है क्योंकि सिद्धांत इस पर आधारित अनुमान लगाने में सक्षम है संपत्ति का नाम
  2. जबसे videoDimension तथा videoBitrate पीके के दोनों हिस्से हैं - निर्दिष्ट करने की कोई आवश्यकता नहीं है nullable = false
  3. यदि आवश्यक हो - समग्र पीके विदेशी कुंजी से बना हो सकता है, तो कुछ संबंधपरक मैपिंग जोड़ने के लिए स्वतंत्र महसूस करें

1
2018-06-08 18:37



आपने जो किया वह एक समग्र प्राथमिक कुंजी है। निश्चित रूप से यह अद्वितीय होगा, लेकिन यह एक प्राथमिक कुंजी है ...;) - Preciel
खैर हाँ, मुझे लगता है कि मैंने अपने जवाब में उल्लेख किया है :) वास्तव में ओपी के मामले में "अद्वितीय सूचकांक" शब्द अधिक उपयुक्त होगा यदि वह पीके बनाने का मतलब नहीं था (यही स्वीकार्य उत्तर है)। लेकिन चूंकि इस प्रश्न में एक अजीब शब्द "समग्र अनूठी कुंजी" है - मुझे नहीं लगता कि हम इसे एक समग्र प्राथमिक कुंजी क्यों नहीं मान सकते हैं - कम से कम यही वह है जो मैं इस प्रश्न में आया था। चीयर्स! - Stas Parshin