लारवेल 5 - कारीगर के बीज [परावर्तन अपवाद] क्लास सोंग्सटेबलसाइडर मौजूद नहीं है


275

जब मैं php कारीगर db चलाता हूं : बीज मुझे निम्न त्रुटि हो रही है:

[ReflectionException] Class SongsTableSeeder does not exist

क्या हो रहा है?

मेरा डेटाबेस श्रेणी:

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder {

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();

        $this->call('SongsTableSeeder');
    }

}

मेरे गाने

<?php

// Composer: "fzaninotto/faker": "v1.4.0"
use Faker\Factory as Faker;
use Illuminate\Database\Seeder;
use DB;

class SongsTableSeeder extends Seeder {

    public function run()
    {
        $faker = Faker::create();
        $songs = [];
        foreach(range(1, 10) as $index)
        {
            $songs[] = ['title' => $faker->words(rand(1,4))];
        }

        DB::table('songs')->insert($songs);

    }

}

107
composer dump-autoload?
थॉमस जेन्सेन

मैंने सोचा कि Faker के रूप में Faker \ Factory का उपयोग करें; काम कर रहा है?
साशा

SongsTableSeederवर्ग परिभाषा वाली फ़ाइल का मार्ग क्या है ?
राउटर


यह डंप और खराब है
लुइगी लोपेज

जवाबों:


748

आपको उसी निर्देशिका SongsTableSeederमें फ़ाइल SongsTableSeeder.phpमें डालने की आवश्यकता है जहाँ आपके पास अपनी DatabaseSeeder.phpफ़ाइल है।

और आपको अपने कंसोल में चलने की आवश्यकता है:

composer dump-autoload

नया क्लास मैप बनाने और फिर चलाने के लिए:

php artisan db:seed

मैंने अभी इसका परीक्षण किया है। यह Laravel 5 में एक समस्या के बिना काम कर रहा है


1
मैं अपने बीजक वर्ग में मॉडल का उपयोग नहीं कर रहा था। अब ठीक काम करता है।
जेमी पूले

1
composer dumpautoloadयह भी उड़ जाता है
कॉनर लिच

संगीतकार डंप-ऑटोलैड ने मेरे लिए समस्या का समाधान किया। संगीतकार डंप-ऑटोलॉड वास्तव में क्या करता है?
लुइज़ अल्मीडा

5
@ LuísAlmeida dump-autoloadपरियोजना में शामिल किए जाने की आवश्यकता वाले सभी वर्गों की सूची को पुन: बनाता है , इसका उपयोग तब किया जाता है जब आपके पास अपनी परियोजना के अंदर एक नया वर्ग होता है। आम तौर पर चल रहा है make:*नव निर्मित वर्ग जोड़ देगा, लेकिन यह तब नहीं होगा जब आप मैन्युअल रूप से एक बीजक बनाते हैं। कम से कम यह है कि मैं इसे खोज के 5 मिनट से काम करने के लिए कैसे समझता हूं। मैं कोई विशेषज्ञ नहीं हूं।
Xander Luciano

मैंने लारावेल 5.8 के साथ एक विकास सर्वर पर इस समाधान की कोशिश की और composer dump-autoloadमेरे लिए काम किया।
मायकोडिंगप्रोजेक्ट

19

मैंने ऐसा करके इसे हल किया:

  1. फ़ाइल सामग्री की प्रतिलिपि बनाएँ।
  2. फ़ाइल को हटाएं।
  3. रन कमांड: php कारीगर बनाते हैं: बीजक।
  4. इस फ़ाइल में फ़ाइल सामग्री की प्रतिलिपि बनाएँ।

ऐसा इसलिए हुआ क्योंकि मैंने फ़ाइल नाम में बदलाव किया। मुझे नहीं पता कि बदलाव के बाद यह काम क्यों नहीं किया।


2
संभवतः कम्पोज़र डंप-ऑटो चलाना आसान था। ऑटोलैडर अब एक पुरानी फ़ाइल ढूंढ रहा है। इसलिए यदि आप इस फाइल को कमांड लाइन के माध्यम से डंप करते हैं, तो यह नई फाइल के साथ एक नई ऑटोलैडर फाइल उत्पन्न करेगा। तो भविष्य में यह प्रयास करें =)
रॉन वैन एसेल्डॉन्कॉन


वैन एसेल्डोक, ठीक है, composer dump-autoloadमेरे लिए काम नहीं करता है। मुझे इसे काम करने के लिए सीडर क्लास को फिर से बनाना होगा।
एम। फिल्स।

इससे मुझे मदद मिली। 'संगीतकार डंप-ऑटोलॉड' मेरे लिए भी काम नहीं करता है, मेरे सर्वर सेटिंग्स के साथ कुछ करने के लिए, या तथ्य यह है कि यह एक साझा गंभीर है।
डर्क जान स्पिलमैन

16

फ़ाइल SongsTableSeeder.php डेटाबेस / बीज निर्देशिका या इसके उपनिर्देशिका में होना चाहिए ।

आपको चलाने की आवश्यकता है:

composer dump-autoload

और फिर:

php artisan db:seed

या:

php artisan db:seed --class=SongsTableSeeder

1
पार्स त्रुटि को 'php कारीगर db: बीज --class = SongsTableSeeder' कमांड के साथ देखने में सक्षम । thnks !!
ओमीके

4

SongsTableSeeder.php डेटाबेस / बीज निर्देशिका में होना चाहिए

कंसोल कमांड चरण:

composer dump-autoload

और फिर:

php artisan cache:clear

और फिर:

php artisan optimize

और फिर:

php artisan db:seed

या:

php artisan db:seed --class=SongsTableSeeder

मेरे लिए काम किया! विशेष रूप से php artisan optimizeहिस्सा
मूसा नेबेदा

3

मैं बहुत नवीनतम Laravel 5 देव रिलीज़ चला रहा हूं, और यदि आपने नाम स्थान बदल दिया है, तो आपको अपने बीज वर्ग को इस तरह कॉल करना होगा:

$this->call('\todoparrot\TodolistTableSeeder');

जाहिर है आपको todoparrotअपने नामित नामस्थान के साथ बदलने की आवश्यकता होगी । अन्यथा मुझे मूल प्रश्न में संकेतित वही त्रुटि मिलती है।


3

यह मत composer dump-autoloadभूलो कि ऑटोलैड / क्लासमेट अनुभाग के संबंध में काम करता है composer.json। इस बारे में ध्यान रखें कि यदि आपको सीडर्स डायरेक्टरी बदलने या सीडर्स को स्टोर करने के लिए कई डाइरेक्टरीज़ का उपयोग करना है।

"autoload": {
    "classmap": [
      "database/seeds",
      "database/factories"
    ],
},

0

अगर हमारा CustomTableSeeder DatabaseSeeder के साथ एक ही निर्देशिका में है, तो हमें नीचे की तरह उपयोग करना चाहिए:

$this->call('database\seeds\CustomTableSeeder');

हमारे DatabaseSeeder फ़ाइल में; फिर एक और त्रुटि यह कहेगी कि: 'DB वर्ग नहीं मिला' तो हमें अपने DBTade को अपने CustomTableSeeder फ़ाइल में जोड़ना चाहिए जैसे कि नीचे:

use Illuminate\Support\Facades\DB;

यह मेरे लिए काम किया!


0

मैंने इसमें केवल दो वर्गों के साथ केवल एकल फाइल का उपयोग किया है:

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

use Faker\Factory as Faker;

class DatabaseSeeder extends Seeder {

/**
 * Run the database seeds.
 *
 * @return void
 */
public function run()
{
    //Lesson::truncate();

    Model::unguard();

    $this->call("LessonsTableSeeder");


}

}

class LessonsTableSeeder extends Seeder {

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

    $faker = Faker::create();

    foreach(range(1,30) as $index) {

        Lesson::create(['title' => $faker->sentence(5), 'body' => $faker->paragraph(4)]);

    }

}

}

0

यदि आपने किसी अन्य परियोजना से सीडर्स फ़ाइलों की प्रतिलिपि बनाई है, तो आपको कारीगर कमांड चलाने की आवश्यकता है php artisan db:seedअन्यथा यह ठीक है।


0

मुझे [ReflectionException] Class Seeder does not existभी मिला और जब मैं उपयोग करता composer dump-autoloadहूं, मुझे एक त्रुटि मिलीpreg_match(): JIT compilation failed: no more memory तो जब मैं इसे चलाता हूं तो मुझे ।

मैंने क्या किया कि मैं php.ini में बदल ;pcre.jit=1गया ! आप अपने टर्मिनल में उपयोग करके पा सकते हैं !pcre.jit=Offphp --ini

मैं का उपयोग कर रहा हूँ MAC php के साथ 7.3! आशा है कि आप में से किसी की मदद करो!


0

आप शायद निर्दिष्ट करें .php एक्सटेंशन और यह आपकी कक्षा को नहीं मिला है।

मैं क्या कर रहा था:

php artisan db:seed --class=RolesPermissionsTableSeeder.php

मेरी समस्या का हल क्या है: मैं क्या कर रहा था:

php artisan db:seed --class=RolesPermissionsTableSeeder

-5

मेरे पास एक ही "प्रतिबिंब अपवाद" त्रुटि थी। समाधान कक्षा फ़ाइल को सर्वर पर, देव से, मेरे लिए कॉपी करना था। गूंगा गलती, लेकिन यह देखते हुए कि हम कितनी आसानी से हर बार उन्हें सर्वर पर कॉपी करना भूल जाते हैं, कितनी फाइलें निपटाते हैं।


2
यह प्रतिक्रिया बहुत अस्पष्ट है और आपके विशिष्ट होस्टिंग सेटअप के साथ युग्मित है। यद्यपि आपके इनपुट को महत्व दिया गया है, लेकिन इससे डेवलपर्स को इस समस्या के समाधान की तलाश में मदद नहीं मिल सकती है। मुझे लगता है कि आपका मुद्दा आपके द्वारा सर्वर पर फ़ाइलों को कॉपी करने के लिए मनुष्यों को छोड़ने के कारण है। यह एक सीआई पाइप लाइन के लिए प्रोत्साहित किया जाता है जहाँ फाइलें स्वतः सर्वर पर तैनात होती हैं :)
charj
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.