एलोकेंट में डिफ़ॉल्ट प्राथमिक कुंजी बदलें


93

क्या मैं एलोकेंट मॉडल को प्राथमिक कुंजी बदल सकता हूं।

मैं admin_id'आईडी' के बजाय उदाहरण के लिए प्राथमिक कुंजी सेट करना चाहता हूं ?

मुझे पता है कि मैं जैसे मॉडल के लिए टेबल का नाम बदल सकता हूं

protected $table = "admin";

क्या प्राथमिक कुंजी के लिए कुछ समान है?

जवाबों:


191

हाँ

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

16
इस प्रश्न को संदर्भित करने वाले किसी अन्य व्यक्ति के लिए, अन्य उत्तरों में से किसी एक का उपयोग करें। $primarykeyहोना चाहिए $primaryKey(अपरकेस अक्षर K) और अन्यथा काम नहीं करेगा।
जेरेमी हैरिस

4
क्या होगा यदि मेरे पास प्राथमिक कुंजी के रूप में एक से अधिक फ़ील्ड हैं?
बैगूसिलेटर

@bagusflyer आप सही मजाक कर रहे हैं? एक डेटाबेस तालिका में एक से अधिक प्राथमिक कुंजी?
Novica89

@bagusflyer एलोक्वेंट मिश्रित कुंजियों का समर्थन नहीं करता है, लेकिन यहाँ एक अच्छा समाधान है ताकि आप $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopod922

बस FYI करें ऐसा लगता है कि Laravel 5.4 में आपको अब अपने PK को सेट करने की आवश्यकता नहीं है यदि यह मॉडल नाम के समान है क्योंकि यह आपके लिए इसे जोड़ता है (और अन्यथा त्रुटि हो जाएगी)।
मिंट

14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

परंतु

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

अक्षर K (पूँजी) को चर $ प्राइमरी पर ध्यान दें


10

यदि आप एक समग्र कुंजी (एक स्ट्रिंग) का उपयोग करना चाहते हैं

आपको यह सुनिश्चित करने की आवश्यकता है कि आप सेट करते हैं public $incrementing = falseअन्यथा लार्वा क्षेत्र को एक इंटगर को दे देगा, दे रहा है0

class User extends Model {

    protected $primaryKey = 'my_string_key';
    public $incrementing = false;

}

मैंने प्राथमिक स्ट्रिंग पर एक टेक्स्ट स्ट्रिंग कॉल के रूप में ओवरराइड किया था - संग्रह में मान सही था लेकिन जब मैंने कॉल को $ परिणाम के रूप में संदर्भित किया-> प्राथमिक_ यह केवल शून्य पर वापस आएगा हालांकि संग्रह / सरणी ने सही स्ट्रिंग दिखाया - थोड़ी देर ली इसे नीचे ट्रैक करें जब मैंने देखा कि प्राइमरीके ऑब्जेक्ट में एक INT और इंक्रीमेंबल के रूप में दिखा रहा था। सार्वजनिक $ वेतन वृद्धि = गलत निर्धारित करना था।
जी-मैन

7

प्राथमिक कुंजी चर संवेदनशील है और $primaryKeyकाम करना चाहिए ।

उदाहरण:

protected $primaryKey = 'your_primary_key_id';

एक मॉडल वर्ग के भीतर उदाहरण:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}

1
क्या मुझे अभी भी इसे $ भरण योग्य सरणी में जोड़ना है?
अनीस

1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

लारवेल प्रलेखन के अनुसार:


एलोक्वेंट यह भी मान लेगा कि प्रत्येक टेबल में एक प्राथमिक कुंजी कॉलम है id। आप एक परिभाषित कर सकते हैं$primaryKey इस सम्मेलन को ओवरराइड संपत्ति को ।

इसके अलावा, एलोकेंट मानता है कि प्राथमिक कुंजी एक वृद्धिशील पूर्णांक मान है, जिसका अर्थ है कि डिफ़ॉल्ट रूप से प्राथमिक कुंजी स्वचालित रूप से एक इंट में डाली जाएगी। यदि आप एक गैर-इंक्रीमेंट या एक गैर-संख्यात्मक प्राथमिक कुंजी का उपयोग करना चाहते हैं, तो आपको $incrementingअपने मॉडल पर सार्वजनिक संपत्ति को गलत पर सेट करना होगा ।


-3

प्राथमिक कुंजी असाइन करने के लिए आपको चाहिए ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.