2016-02-15 11 views
17

Uso con successo Eloquent come pacchetto autonomo in Slim Framework 2.Errore Eloquent: Una radice di facciata non è stata impostata

Ma ora che voglio fare uso di Illuminate \ Support \ Facciate \ DB da quando ho bisogno di mostrare alcune statistiche ottenendo informazioni da 2 tavoli e l'utilizzo di registrazione a sinistra e un contatore dal database come questo:

use Illuminate\Support\Facades\DB; 
$projectsbyarea = DB::table('projects AS p') 
     ->select(DB::raw('DISTINCT a.area, COUNT(a.area) AS Quantity')) 
     ->leftJoin('areas AS a','p.area_id','=','a.id') 
     ->where('p.status','in_process') 
     ->where('a.area','<>','NULL') 
     ->orderBy('p.area_id'); 

ottengo il seguente errore:

Type: RuntimeException 
Message: A facade root has not been set. 
File: ...\vendor\illuminate\support\Facades\Facade.php 
Line: 206 

Come posso risolverlo?

Finora ho scoperto, in this link, che ho bisogno di creare un nuovo contenitore di app e quindi associarlo a Facade. Ma non ho scoperto come farlo funzionare.

Ecco come ho iniziato il resto della mia eloquente e lavorando bene:

use Illuminate\Database\Capsule\Manager as Capsule; 

$capsule = new Capsule(); 

$capsule->addConnection([ 
    'my'   => $app->config->get('settings'), 
    /* more settings ...*/ 
]); 

/*booting Eloquent*/ 
$capsule->bootEloquent(); 

Come posso risolvere questo problema?

fisso Come @ user5972059 Detto questo, ho dovuto aggiungere $capsule->setAsGlobal();//This is important to make work the DB (Capsule) appena sopra $capsule->bootEloquent();

Quindi, la query viene eseguita in questo modo:

use Illuminate\Database\Capsule\Manager as Capsule; 
$projectsbyarea = Capsule::table('projects AS p') 
      ->select(DB::raw('DISTINCT a.area, COUNT(a.area) AS Quantity')) 
      ->leftJoin('areas AS a','p.area_id','=','a.id') 
      ->where('p.status','in_process') 
      ->where('a.area','<>','NULL') 
      ->orderBy('p.area_id') 
      ->get(); 

risposta

22

È necessario modificare il codice per:

$Capsule = new Capsule; 
$Capsule->addConnection(config::get('database')); 
$Capsule->setAsGlobal(); //this is important 
$Capsule->bootEloquent(); 

E all'inizio del file di classe devi imp ort:

use Illuminate\Database\Capsule\Manager as DB; 
+1

dove lo metto? Ho ricevuto questo errore dopo l'aggiornamento a Laravel 5.4: https://i.gyazo.com/a664efbe34aea117d2bbb8a8ad448951.png –

4

Perché qualcuno ha contrassegnato la risposta non utile ha funzionato perfettamente per me. stavo usando use Illuminate\Support\Facades\DB as DB; ma questo ha funzionato use Illuminate\Database\Capsule\Manager as DB; dopo l'impostazione capsula come globale $capsule->setAsGlobal(); in slim.

+1

dove lo metto? Ricevo questo errore dopo l'aggiornamento a laravel 5.4: https://i.gyazo.com/a664efbe34aea117d2bbb8a8ad448951.png –

+0

avvio Eloquente per impostazione predefinita in laravel questo è quello di utilizzare standalone eloquenti. il tuo errore offre qualcos'altro pls condividi errore completo. –

1

Ho appena risolto questo problema decommentando '//' prima di '// $ app-> withFacades()'; in bootstrap/app.php

2

Prova applfiammato app.php $ app-> withFacades();

+0

Grazie! Me ne ero dimenticato, ha funzionato per me. – Jamesst20

Problemi correlati