2017-04-22 17 views
6

मैं जेफरी वे द्वारा लार्कास्ट्स में वृद्धिशील एपीआई नामक ट्यूटोरियल का अनुसरण कर रहा हूं।लार्वेल 5.4 में बीज पिवट टेबल कैसे करें?

लैरवेल 4 फ़ेकर क्लास बीजिंग और लार्वेल 5.4 के बीच एक अलग कोडिंग है।

मैं अभी भी ट्यूटोरियल "सीडर रीलोडेड" से एक ही कोड लाइनों का पालन करता हूं। अब, मैं के साथ फंस कर रहा हूँ "क्लास LessonTagTableSeeder मौजूद नहीं है"

TagTableSeeder

class TagsTableSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 

     $faker = Faker::create('App\Tag'); 

     for($i=1; $i <= 10; $i++) { 

      DB::table('tags')->insert([ 
       'name' => $faker->word, 
       'created_at' => \Carbon\Carbon::now(), 
       'updated_at' => \Carbon\Carbon::now(), 

      ]); 


     } 


    } 

LessonTagTableSeeder

use Illuminate\Database\Seeder; 
use Faker\Factory as Faker; 
use App\Lesson; 
use App\Tag; 

class LessonTagTableSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 

     $faker = Faker::create(); 

     $lessonIds = Lesson::pluck('id')->all(); 
     $tagIds = Tag::pluck('id')->all(); 

     for($i=1; $i <= 30; $i++) { 

      DB::table('lesson_tag')->insert([ 
       'lesson_id' => $faker->randomElement($lessonIds), 
       'tag_id' => $faker->randomElement($tagIds) 
      ]); 


     } 


    } 

DatabaseSeeder

use Illuminate\Database\Seeder; 
use Illuminate\Database\Eloquent\Model; 
use App\Lesson; 
use App\Tag; 
use DB; 

class DatabaseSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 

     DB::statement('SET FOREIGN_KEY_CHECKS=0'); 
     Lesson::truncate(); 
     Tag::truncate(); 
     DB::table('lesson_tag')->truncate(); 

     Model::unguard(); 

     $this->call('LessonsTableSeeder'); 
     $this->call('TagsTableSeeder'); 
     $this->call('LessonTagTableSeeder'); 

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

    } 

मैं साथ TagsTableSeeder बीज करने में सक्षम था php कारीगर db: बीज --class = TagsTableSeeder

जब मैं चलाने "php कारीगर db: बीज --class = LessonTagTableSeeder", मैं के साथ संकेत कर रहा हूँ:

[ReflectionException] कक्षा LessonTagTableSeeder नहीं है मौजूद है

क्या आपको कोई विचार है कि ऊपर दिए गए कोड को कैसे संपादित किया जाए? किसी भी मदद की सराहना की जाती है

उत्तर

1

रन इस आदेश और फिर पुन: प्रयास करें

संगीतकार डंप-autoload -ओ

+0

धन्यवाद। यह एक सम्मोहन की तरह काम करता है! –

2

सुनिश्चित करें कि फ़ाइल को LessonTagTableSeeder.php के रूप में नामित किया गया है और यह अन्य बीडर के समान निर्देशिका में है। फिर यह आदेश चलाएं:

composer du 

उसके बाद फिर से बीडर निष्पादित करने का प्रयास करें।

+0

धन्यवाद। मेरा कोड अब काम करता है –

0
Usually cache 

php artisan cache:clear 

composer update 

php artisan serve 
+3

कृपया कुछ स्पष्टीकरण शामिल करने के लिए अपना उत्तर संपादित करें। कोड-केवल उत्तर भविष्य में एसओ पाठकों को शिक्षित करने के लिए बहुत कम करते हैं। आपका जवाब कम गुणवत्ता वाले होने के लिए मॉडरेशन कतार में है। – mickmackusa

6

जब आप बोने की मशीन फ़ाइलों में परिवर्तन करें और उन्हें अपने परिवर्तन को दर्शाता है नहीं है कि आप की जरूरत है संगीतकार डंप ऑटोलोड लोड करें।

आप निम्न कमांड में से किसी एक

$ composer dump-autoload 

$ composer du 

$ composer dump 


$ composer dump-autoload -o 

तब का उपयोग आप db आदेश चलाने का प्रयास कर सकते हैं: फिर से बीज और यह आपको परिवर्तन को दर्शाता है।

क्या संगीतकार डंप ऑटोलोड लोड करते हैं?

composer dump-autoload कोई चीज़ डाउनलोड नहीं करेगा। यह सिर्फ उन सभी वर्गों की सूची को पुन: उत्पन्न करता है जिन्हें परियोजना (autoload_classmap.php) में शामिल करने की आवश्यकता है। जब आपके पास अपनी परियोजना के अंदर एक नई कक्षा है तो आदर्श।

आदर्श रूप से, आप अपने वेबपृष्ठों के तेज़ी से लोड के लिए संगीतकार dump-autoload -o निष्पादित करते हैं।एकमात्र कारण यह डिफ़ॉल्ट नहीं है, क्योंकि यह उत्पन्न करने में थोड़ा अधिक समय लगता है (लेकिन केवल थोड़ा ध्यान देने योग्य है)

0

एक पिवट तालिका, या एसोसिएशन टेबल, एक सारणी है जो दो अन्य तालिकाओं के बीच संबंधों को मानचित्रित करती है, बहुत उपयोगी दो तालिकाओं के लिए जिनमें कई से अधिक रिश्ते हैं।

वहाँ कोड के 3 महत्वपूर्ण लाइनों जो आप 'DatabaseSeeder' के लिए आपूर्ति कर रहे हैं:

$this->call('LessonsTableSeeder'); 
    $this->call('TagsTableSeeder'); 
    $this->call('LessonTagTableSeeder'); 

आप क्या लिखा है के आधार पर, आप केवल 'TagsTableSeeder' और 'LessonTagTableSeeder' के लिए आदेशों भाग गया। आप 'LessonsTableSeeder' के लिए कमांड चलाने से चूक गए।

दूसरे शब्दों में, आपके पास 'टैग' तालिका में रिकॉर्ड थे, लेकिन 'पाठ' तालिका में कोई भी नहीं था। इसलिए दो तालिकाओं के बीच कोई रिकॉर्ड नहीं था और एसक्यूएल एक नल एसोसिएशन (पिवट) टेबल नहीं बना सका।

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

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