2013-02-02 30 views
14

क्या एल 4 की नई बीजों की सुविधा में कई से अधिक रिश्तों को प्रबंधित करने का कोई आसान तरीका है?लार्वेल 4: बीज में रिश्ते के साथ काम करना

पिवोट टेबल के लिए बीज बनाने का एक तरीका होगा, लेकिन मैं बहुत काम करता हूं।

इस तरह की चीज़ के लिए एक अच्छा वर्कफ़्लो पर कोई विचार?

उत्तर

41

लैरवेल 4 के नवीनतम संस्करण में आप ऑर्डर को परिभाषित करते हैं कि सभी बीडर स्क्रिप्ट डेटाबेसस्विडर क्लास की "रन" विधि में चलती हैं।

public function run() 
{ 
    DB::statement('SET FOREIGN_KEY_CHECKS=0;'); 

    $this->call('PrimaryTableOneSeeder'); 
    $this->command->info('The first primary table has been seeded!'); 

    $this->call('PrimaryTableTwoSeeder'); 
    $this->command->info('The second primary table has been seeded!'); 

    $this->call('PivotTableSeeder'); 
    $this->command->info('The pivot table has been seeded!'); 

    DB::statement('SET FOREIGN_KEY_CHECKS=1;'); 
} 

आप देखेंगे कि मैं अपने सभी बीजिंग चलाने से पहले और बाद में विदेशी कुंजी बाधाओं को अक्षम करता हूं। यह खराब अभ्यास हो सकता है लेकिन यह एकमात्र तरीका है कि मैं प्रत्येक तालिका के लिए आईडी गिनती को फिर से सेट करने के लिए ट्रंकेट फ़ंक्शन का उपयोग कर सकता हूं। यदि आप inserting related models पर मार्गदर्शिका का पालन करते हैं तो यह अभ्यास अनावश्यक हो सकता है।

class PrimaryTableOneSeeder extends Seeder { 

public function run() 
{ 
    DB::table('primaryone')->truncate(); 
    Primaryone::create(array(
     'field' => 'value', 
     'created_at' => new DateTime, 
     'updated_at' => new DateTime 
    )); 
} 

mass assignment उपयोग करने के लिए के रूप में मैं अपने उदाहरण में कर रहा हूँ और के रूप में प्रलेखन के नवीनतम संस्करण है, आप मॉडल के लिए या तो कुछ पहरा या fillable कॉलम का उल्लेख करना होगा। ऐसा करने के लिए बस अपने मॉडल में इस तरह की संपत्ति जोड़ें:

class Primaryone extends Eloquent { 

protected $guarded = array('id'); 
+1

मैं कहूंगा कि यह लगभग सही जवाब है। अगर मैं आप थे तो मैं विदेशी कुंजी चेक अक्षम नहीं करता। पर चर्चा की जा सकती है गीलेर भी टेबल को छोटा करने के लिए अच्छा है। मैं यह नहीं करूँगा, लेकिन यह सिर्फ मुझे है। इसका कारण यह है कि डीबी: बीज किसी भी समय चलाया जा सकता है जिसका मतलब है कि डीबी में इसका महत्वपूर्ण डेटा हो सकता है। – AndHeiberg

+1

@AndHeiberg यह एक अच्छा मुद्दा है। हर कोई इस बात से अवगत नहीं है कि बीज उत्पादन में उपयोग के लिए नहीं हैं बल्कि परीक्षण डेटा के साथ एक विकास डेटाबेस को बीजिंग के लिए है, जो ठीक होने पर ठीक है। उत्पादन के लिए डेटा या तो अपने इंटरफ़ेस या एसएसएच डीबी कनेक्शन के माध्यम से जोड़ा जाना चाहिए। – isimmons

+0

क्या कोई स्क्लाइट-संगत विधि है? 'SET FOREIGN_KEY_CHECKS' स्क्लाइट के साथ एक त्रुटि ट्रिगर करता है।यही वह जगह है जहां मेरा मुद्दा निकलता है: मैं देव के लिए एक quickie sqlite डीबी के साथ काम कर रहा हूं और अब पोस्टग्रेस पर स्थानांतरित करने की कोशिश कर रहा हूं, केवल यह पता लगाने के लिए कि स्क्लाइट की उदारता ने कई समस्याओं को छुपाया है। –

0

सीडिंग सरल जानकारी, परीक्षण डेटा और स्थिर जानकारी के लिए है। मैं संबंधों को संभालने के लिए इसका उपयोग करने की सिफारिश नहीं करता। व्यक्तिगत रूप से, मैं केवल अपने आवेदन का परीक्षण करने में मदद के लिए प्रति तालिका 2 या 3 रिकॉर्ड के लिए इसका उपयोग करता हूं।

अपने आवेदन को विकसित करते समय, डेटा प्रविष्टि (व्यवस्थापक) क्षेत्र पर पहले काम करने के बारे में सोचें। इस तरह आप आसानी से परीक्षण डेटा जोड़ सकते हैं।

+1

मैं सहमत हूं, लेकिन यहां तक ​​कि जब आपके पास आसान डेटा एंट्री बीजिंग अभी भी महत्वपूर्ण और सहायक है। तो जब तक आपके पास बीजेपी में व्यवस्थापक इनपुट को परिवर्तित करने का कोई तरीका नहीं है, क्या यह वास्तव में मेरे प्रश्न का उत्तर दे रहा है? – AndHeiberg

3

लैरवेल बीज फ़ाइलें नियमित PHP स्क्रिप्ट हैं (सिवाय इसके कि उन्हें एक सरणी वापस करने की आवश्यकता है)। आप बीज फ़ाइलों में डेटाबेस से पूछ सकते हैं (एलोक्वेंट, फ्लुएंट बिल्डर या यहां तक ​​कि पीडीओ का उपयोग करके)।

कई से अधिक समस्याओं से निपटने का एक तरीका जानबूझकर अपनी बीजों की फाइलों को नामित करना है ताकि पिवट तालिका आखिरी बार आबादी हो ... उदाहरण के लिए, आप फ़ाइल नाम (यानी 1_Authors) पर एक संख्यात्मक मान प्रीपेड कर सकते हैं। PHP, 2_books.php, 3_authors_books.php आदि)। कारीगर उन्हें निष्पादित करने से पहले फ़ाइल नामों को वर्णानुक्रम से टाइप करता है।

मैंने Laravel 4 database seeding पर एक छोटा ट्यूटोरियल पोस्ट किया है - यह आपको जाना चाहिए। इसके अतिरिक्त, आप seeding पर आधिकारिक दस्तावेज़ से परामर्श ले सकते हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^