2016-02-15 17 views
17

Używam Eoxquent jako samodzielnego pakietu w Slim Framework 2 z powodzeniem.Eonquent error: Korzeń elewacji nie został ustawiony

Ale teraz, że chcę skorzystać z Illuminate \ Support \ Fasady \ DB ponieważ muszę pokazać niektóre statystyki przez uzyskanie informacji od 2 tabel i przy użyciu LEFT JOIN i licznik z bazy danych takie jak to:

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'); 

pojawia się następujący błąd:

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

Jak mogę go rozwiązać?

Do tej pory dowiedziałem się, w this link, że muszę utworzyć nowy kontener aplikacji, a następnie powiązać go z elewacją. Ale nie dowiedziałem się, jak to działa.

ten sposób zacząłem resztę wymowny i działa bez zarzutu:

use Illuminate\Database\Capsule\Manager as Capsule; 

$capsule = new Capsule(); 

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

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

Jak mogę rozwiązać ten problem?

Fixed Jako @ user5972059 powiedział, musiałem dodać $capsule->setAsGlobal();//This is important to make work the DB (Capsule) tuż nad $capsule->bootEloquent();

Następnie kwerenda jest wykonywana tak:

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(); 

Odpowiedz

22

trzeba zmienić swój kod do:

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

I na początku pliku klasowego musisz imp ort:

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

gdzie mam to umieścić? Otrzymuję ten błąd po aktualizacji do Laravel 5.4: https://i.gyazo.com/a664efbe34aea117d2bbb8a8ad448951.png –

4

Dlaczego ktoś oznaczył odpowiedź jako nieprzydatną, doskonale sprawdziła się dla mnie. Używałem use Illuminate\Support\Facades\DB as DB;, ale działało to use Illuminate\Database\Capsule\Manager as DB; po ustawieniu kapsuły jako globalnej $capsule->setAsGlobal(); w szczupłej.

+1

gdzie mam to umieścić? Otrzymuję ten błąd po uaktualnieniu do Laravel 5.4: https://i.gyazo.com/a664efbe34aea117d2bbb8a8ad448951.png –

+0

Eonquent boot domyślnie w laravel to użycie elokwentnego samodzielnego. twój błąd oferta coś innego pls udział kompletny błąd. –

1

Po prostu rozwiązuję ten problem przez odkomentowanie "//" przed "// $ app-> withFacades()"; w bootstrap/app.php

2

Spróbuj niezatwierdzonej aplikacji app.php $ app-> withFacades();

+0

Dzięki! Zapomniałem o tym, pracował dla mnie. – Jamesst20

Powiązane problemy