Laravel 5: DB Seed-Klasse nicht gefunden

Lesezeit: 4 Minuten

Ich habe diese DatabaseSeeder.php:

<?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('MemberInvitationSeeder');
        }
    }

Ich habe diese Datei MemberInvitationSeeder.php, Geschwister der Datei DatabaseSeeder.php

<?php

use Illuminate\Database\Seeder;
use App\MemberInvitation;

    class MemberInvitationSeeder extends Seeder {

        public function run()
        {
            MemberInvitation::truncate();

            MemberInvitation::create( [
                'id' => 'BlahBlah' ,//com_create_guid(),
                'partner_id' => 1,
                'fisrt_name' => 'Thats',
                'last_name' => 'Me',
                'email' => '[email protected]',
                'mobile_phone' => '444-342-4234',
                'created_at' => new DateTime
            ] );

        }
    }

Jetzt rufe ich an

php artisan db:seed

und ich bekomme:

[ReflectionException]                        
  Class MemberInvitationSeeder does not exist

Ich habe alles versucht, was ich finden konnte, einschließlich “composer dump-autoload”. umsonst. Was mache ich falsch?

  • Tut $this->call('\MemberInvitationSeeder'); einen Unterschied machen?

    – ceejayoz

    11. Mai 2015 um 19:37 Uhr

  • Oder use App\MemberInvitationSeeder in DatabaseSeeder.php

    – Tim Lewis

    11. Mai 2015 um 19:40 Uhr

  • Es behauptet nur, dass \MemberInvitationSeeder nicht gefunden wurde…

    – JasonGenX

    11. Mai 2015 um 19:43 Uhr

  • use App\MemberInvitationSeeder hat keine Auswirkung. Immer noch nicht gefunden.

    – JasonGenX

    11. Mai 2015 um 19:44 Uhr

  • Haben Sie daran gedacht, composer dump-autoload auszuführen?

    – maztch

    11. Mai 2015 um 20:00 Uhr

Benutzer-Avatar
Krzysztof Raciniewski

Schritt eins – Samen erzeugen:

php artisan make:seed MemberInvitationSeeder

Schritt zwei – In DatabaseSeeder.php Zeile hinzufügen:

$this->call(MemberInvitationSeeder::class);

Schritt drei:

composer dump-autoload

Schritt vier:

php artisan db:seed

Das sollte funktionieren


Wenn dies nicht der Hinweis ist, überprüfen Sie die Datei composer.json und stellen Sie sicher, dass Sie den folgenden Code im Abschnitt „autoload“ haben:

"classmap": [
    "database"
],

  • “composer dump-autoload” ausführen, das einzige, was ich tun musste.

    – Andreas

    10. März 2018 um 3:05 Uhr

  • Dies sollte die akzeptierte Antwort sein, die aktuelle basiert auf einer falschen Schlussfolgerung oder fehlendem Wissen.

    – Roland

    10. Juli 2018 um 13:33 Uhr

  • Cool, aber ein bisschen OT: Sie können Ihr Modell verwenden, um eine Datenbank zu erstellen. Anstatt von DB::table('my_foos')->insert(['col1' => 'Value 1']) verwenden MyFoos::create(['col1' => 'Value1']). Der Vorteil ist die automatische Wartung created_at und updated_at werden für Sie ausgefüllt. Während mit DB::table('x')->insert() sie sind leer.

    – Roland

    10. Juli 2018 um 13:50 Uhr

Ich habe dies gelöst, indem ich die Klasse mit der Anweisung zur Seeder-Datei hinzugefügt habe use:

<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
use App\YourClassName;

Ich glaube, ich kenne jetzt den Grund.

Die neue Klasse MemberInvitationSeeder war nicht in den automatisch geladenen Klassen in der Datei composer.json enthalten.

Es war nicht da, weil ich diese Klasse manuell hinzugefügt habe.

Nun, wenn ich solche Klassen wieder hinzufüge, was sollte ich verwenden, damit meine Klasse automatisch zum Autoloader kommt?

  • Werfen Sie einen Blick in Ihre composer.json-Datei. In dem autoload Abschnitt, sollten Sie sehen, wo es eingerichtet wird classmap und es sollte haben "database" im Array, das Composer anweist, alles in diesem Ordner zum Autoloader hinzuzufügen. Wenn es nicht drin ist, ist das dein Problem. Wenn es drin ist, versuchen Sie es composer self-update und dann composer dump und sehen, ob das hilft.

    – Benutzer1669496

    11. Mai 2015 um 21:02 Uhr

Diese Arbeit für mich

  1. composer dump-autoload
  2. php artisan db:seed

Benutzer-Avatar
Nava Bogatee

Ich bin auf einen ähnlichen Fehler gestoßen, habe aber DB-Fassade verwendet DB::table eher als Modell. Ich poste die Antwort nur für den Fall, dass jemand ähnliche Probleme hat.

Die Seeder-Datei hatte einen Namespace namespace Database\Seeders; und Laravel hat versucht, im Namespace nach der DB-Klasse zu suchen, und daher ist der Fehler aufgetreten.

Class 'Database\Seeders\DB' not found.

Auflösungen:

  • Entfernen Sie den Namespace und führen Sie ihn aus composer dump-autoload
  • ODER Fügen Sie einen umgekehrten Schrägstrich hinzu \DB::table('stock_categories')->([ ... ]); also fängt Laravel an, das zu suchen DB-Fassade von der Wurzel (nicht aus dem angegebenen Namensraum)

Z.B,

\DB::table('MemberInvitation')->insert( [
         'id' => 'BlahBlah' ,//com_create_guid(),
         'partner_id' => 1,
         'fisrt_name' => 'Thats',
         'last_name' => 'Me',
         'email' => '[email protected]',
         'mobile_phone' => '444-342-4234',
         'created_at' => new DateTime
    ] );

Benutzer-Avatar
Paul Roub

Wenn die oben genannten Lösungen nicht funktionieren, versuchen Sie diese. Möglicherweise haben Sie den Namespace geändert (standardmäßig „App“). Was Sie tun müssen, ist zu gehen composer.json Datei und überprüfe dies:

"autoload": {
      "classmap": [
          "database"
      ],
      "psr-4": {
          "App\\": "app/"
      }
  },

Wenn der Namespace wie in diesem Beispiel App ist, ist diese Lösung nichts für Sie.

Nehmen Sie andernfalls den gefundenen Namespace und fügen Sie diese Zeile in Ihre Seeder-Klasse ein:

use NameSpaceFound\User;

Benutzer-Avatar
Max Sysoev

Sie sollten Namespace einbeziehen, wenn Sie eine Zeichenfolge als Parameter verwenden möchten

 $this->call('Database\Seeders\MemberInvitationSeeder');

  • Es ist nicht erforderlich, den Pfad der Seeder-Datei hinzuzufügen. $this->call([MemberInvitationSeeder::class]); nur das reicht

    – Ankit Jindal

    18. Oktober 2020 um 13:23 Uhr

  • Dein Weg ist genug, da stimme ich zu, aber meiner funktioniert auch. Nur eine Alternative

    – Max Sysoev

    19. Oktober 2020 um 15:51 Uhr

1206210cookie-checkLaravel 5: DB Seed-Klasse nicht gefunden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy