2014-10-13 7 views
9

Sono un novizio in Laravel e mi sto insegnando come autenticare da una tabella di accesso. Ho migrato e creato la tabella. Ora, sto provando a seminare i dati nella tabella di login, ma il prompt dei comandi mi dà continuamente errori, che dice Fatal Error, class login not found e non ho idea di cosa mi sia perso. Quindi qualcuno può aiutarmi per favore. Ecco il codice che ho, e sì sto usando laravel 4,3La seminatrice Laravel dà errore. Classe non trovata

<?php 
class loginTableSeeder extends Seeder 
{ 
    public function run() 
    { 
     DB::table('login')->delete(); 
     login::create(array(
      'username' => 'sanju', 
      'password' => Hash::make('sanju') 
      )); 
    } 
} 


?> 
+14

provare a eseguire 'compositore dumpautoload' –

+0

Ci dispiace ma non funziona per me. L'ho provato prima di –

+2

Qual è il risultato di 'php composer.phar diagnose' e ​​dovrebbe essere' compositore dump-autoload' con un trattino – Ohgodwhy

risposta

7

È necessario creare un modello Eloquent per quella tabella per utilizzare Login::create(). È possibile farlo con un semplice comando artigianale:

$ php artisan generate:model Login

Questo genererà un nuovo modello Eloquente in app/models directory che dovrebbe assomigliare a questo.

class Login extends Eloquent { 

    protected $fillable = []; 
    protected $table = 'login'; 

} 

Il codice dovrebbe funzionare dopo. Se ancora non si è sicuri di eseguire composer dump-autoload.

+0

Ehi, sono un po 'vicino al tuo. La soluzione ha funzionato ma solo il 50%, ora l'errore è la tabella di base o la vista non trovata. tavolo hariyali.login, ma la mia tabella è solo login quindi da dove provengono gli accessi. Gli extra vengono da –

+0

Specificare il nome della tabella come proprietà di classe nella classe del modello Eloquent 'protected $ table = 'login';'. Ho aggiornato la mia risposta. – Bogdan

+0

Eloquent assume automaticamente che il nome della tabella sia la versione plurale in minuscolo del nome del tuo modello, quindi nel tuo caso il nome del modello 'Login' significa che cercherà automaticamente la tabella 'login' a meno che tu non specifichi la proprietà '$ table' per il tuo modello. Puoi leggere [Eloquent Docs] (http://laravel.com/docs/master/eloquent) per ottenere più familiarità con le convenzioni. – Bogdan

13

EDIT

Ora vedo, il problema è con la classe login (con domanda precedente formattazione l'errore esatto era illeggibile). Dovresti cercare di nuovo qual è il nome del file in cui hai la classe login e qual è il nome della classe. La convenzione è che il file dovrebbe avere il nome Login.php (con la lettera maiuscola) e il nome della classe dovrebbe anche essere Login (con maiuscola). Dovresti anche controllare in quale spazio dei nomi è la tua classe Login. Se si è definito in in App spazio dei nomi, si dovrebbe aggiungere al vostro LoginTableSeeder:

use App\Login; 

nella riga successiva dopo <?php

in modo sostanzialmente l'inizio del file dovrebbe essere simile a questo:

<?php 

    use App\Login; 
    use Illuminate\Database\Seeder; 

EARLIER ANSWER

Non hai spiegato ciò che l'errore esatto è (probabilmente l'errore è per Seeder classe), ma:

In database/seeds/DatabaseSeeder.php si dovrebbe correre Accesso seminatrice in questo modo:

$this->call('LoginTableSeeder'); 

Si dovrebbe mettere in database/seeds file di LoginTableSeeder.php con la lettera maiuscola all'inizio .

Ora, il vostro file LoginTableSeeder.php dovrebbe essere simile a questo:

<?php 

use Illuminate\Database\Seeder; 

class LoginTableSeeder extends Seeder 
{ 
    public function run() 
    { 

     // your code goes here 
    } 
} 

è necessario importare Seeder con use all'inizio del file e il nuovo nome della classe deve iniziare con la lettera maiuscola.

Ora è necessario eseguire composer dump-autoload e ora quando si esegue php artisan db:seed funzionerà correttamente.

+0

Grazie per la risposta. Ho perso una cosa. L'ho chiamato in questo modo loginTableSeeder.php, e sì l'ho risolto e ora sembra così, LoginTableSeeder.php. Ora, ecco il mio codice LoginTableSeeder.php. delete(); \t \t Accesso :: creare (array ( \t \t \t 'username' \t => \t 'Sanju', \t \t \t 'password' \t => \t Hash :: rendere ('sanju') \t \t \t)); \t} } ?>, Ma non è ancora stato risolto. –

+0

@samhukiklsk Come ho già detto il problema è probabilmente che la classe Seeder non è stata trovata È necessario utilizzare 'Illuminate \ Database \ Seeder;' riga in questo file dopo '

+0

Soory, mate does not lavora per me. –

0

Ho riscontrato lo stesso problema. Nel mio caso, il compositore era estremamente vecchio e dopo il suo aggiornamento tutto funziona bene.

Aggiornamento compositore con il comando:

$ compositore di auto-aggiornamento

Spero che possa aiutare gli altri.

0

Ho lo stesso problema, ma si può risolvere con l'aggiunta dello spazio dei nomi:

namespace yournamespace; 
use App\Login; 
use Illuminate\Database\Seeder; 
8

Basta eseguire composer dump-autoload -o per il caricatore automatico per raccogliere i novelli classi perché la cartella database non è caricata automaticamente automaticamente con PSR -4.

2

questo ha lavorato per me

composer dump-autoload -o