2015-04-23 14 views
9

Tworzę aplikację, która odczytuje informacje z wielu różnych baz danych, ale w rzeczywistości nie ma własnej bazy danych, ponieważ nigdzie nie jest zapisywana żadna informacja.Czy można używać Laravel 4 bez domyślnej bazy danych

Zasadniczo użytkownik wybiera rekord i typ, a aplikacja wygeneruje plik .pdf na podstawie dokonanych wyborów. Mam wiele połączeń zdefiniowanych w app/config/database.php, ale nie chcę domyślnie łączyć się z żadnymi z nich. Czy istnieje sposób, aby powiedzieć Laravelowi , a nie, aby połączyć się z bazą danych? Próbowałem kilka rzeczy (wszystko w app/config/database.php), pierwszym jest:

'default' => NULL, 
// and 
//'default' => '', 

których oba zwrot:

Undefined index: kierowca

Próbowałem również:

'default' => 'none', 

'connections' => array(
    'none' => array(
     'driver' => '', 
     'host' => '', 
     ... 
    ), 
), 

która z kolei zwraca:

nieobsługiwany kierowca []

nieobsługiwany host []

...

I wreszcie ustawienie 'default' => '', która zwraca:

Database [] nie skonfigurowany.

Znalazłem sposoby używania modeli Laravel bez połączenia z bazą danych, ale nie w samej Laravel.

Edit:

Ustawianie połączenia istniejącego połączenia mysql i nie wybierając bazę „działa”:

'default' => array(
    'driver' => 'mysql', 
    'host'  => 'localhost', 
    'database' => '', 
    'username' => '****', 
    'password' => '****', 
    'charset' => 'utf8', 
    'collation' => 'utf8_unicode_ci', 
    'prefix' => '', 
), 

ale nie jestem pewien, czy to dobry sposób, żeby to zrobić . Wydaje się, że jest to obejście, a nie rzeczywiste rozwiązanie.

+1

Stwórz swój własny sterownik, który nic nie robi? – SamV

+0

Dopóki go nie używasz, nic nie zrobi, więc zostaw to w spokoju. – ceejayoz

Odpowiedz

0

Co należy zrobić, zdefiniuj połączenie w pliku app/config/database.php i określ połączenie przy uruchomieniu zapytania z DB-DB laravel :: połączenie ("nazwa_połączenia"). Więcej informacji tutaj ->http://laravel.com/docs/4.2/database#accessing-connections

+0

Zrobiłem to z wszystkimi powyższymi metodami. Jedynym, w którym działało, jest ostatni przykład braku bazy danych. Pozostałe trzy nadal powodowały ten sam błąd (s). Dostęp do mojego 'Route :: get ("/")' o nazwie 'DB :: connection (" example ") ...' (który nie był domyślną bazą danych) i nadal nie powiodło się. –

0

Po prostu zdefiniuj swój sterownik db jako "sqlite" w konfiguracji bazy danych.

Dopóki nie zmieniłeś niczego w domyślnej sekcji konfiguracji sqlite, wszystkie powinny działać. Nie musisz koniecznie korzystać z bazy danych, ale zmniejszy to liczbę otrzymanych błędów.

Jeśli zmieniłeś domyślną konfigurację sqlite z dowolnego powodu, możesz wykonać poniższe kroki, aby skonfigurować dblite db.

'sqlite' => array(
    'driver' => 'sqlite', 
    'database' => __DIR__.'/../database/production.sqlite', 
    'prefix' => '', 
), 

Upewnij się także, że plik "production.sqlite" istnieje, jeśli jeszcze go nie ma. Można to łatwo zrobić z wiersza poleceń:

touch app/database/production.sqlite 
+0

Zwraca: '" PDOException: could not find driver "'. Zobacz odpowiedź Andrew Willisa. –

4

chciałbym wykonać następujące czynności:

'driver' => 'sqlite', 

i ustawieniach połączenia sqlite

'sqlite' => [ 
    'driver' => 'sqlite', 
    'database' => ':memory:', 
    'prefix' => '', 
] 

ten sposób, to będzie używać in-memory database, a baza danych przestanie istnieć, gdy połączenie z bazą danych zostanie zamknięte, a ponieważ nie otworzysz połączenia, nigdy nie będziesz mieć otwartej lokalnej bazy danych.

Można również usunąć z operatorem bazy danych z pliku app.php config:

'Illuminate\Cookie\CookieServiceProvider', 
    //'Illuminate\Database\DatabaseServiceProvider', 
    'Illuminate\Encryption\EncryptionServiceProvider', 

i fasady do Fluent i Eloquent w tym samym pliku:

'Crypt'  => 'Illuminate\Support\Facades\Crypt', 
    //'DB'  => 'Illuminate\Support\Facades\DB', 
    //'Eloquent' => 'Illuminate\Database\Eloquent\Model', 
    'Event'  => 'Illuminate\Support\Facades\Event', 

który uniemożliwi bycia w stanie połączyć się z lokalnymi bazami danych, a nawet uruchomić połączenie bazy danych sqlite, które właśnie skonfigurowałeś.

+0

Zwraca błąd, tak jak napisałem na ostatnim pytaniu, które sugerowało 'sqlite' jako mój sterownik:' "PDOException: could not find driver" '(odpowiedź została usunięta przez plakat, ale zasadniczo była taka sama jak Twoja). Ponadto wciąż używam fasad "DB" i "Eloquent", ponieważ wciąż pobieram informacje z bazy danych, więc druga połowa twojego pytania wydaje się złym pomysłem. –

+0

Tak, druga część była bardziej przydatna, gdy ludzie ponownie odwiedzili to pytanie i chcieli aplikacji bez bazy danych. Po prostu nie interesuje Cię, w jakim środowisku używasz kodu? Używam sqlite w bazach danych pamięci przez cały czas do testów i nigdy nie napotkałem problemu z niemożnością znalezienia sterowników. –

+0

Tak, to ma sens, ale nie dotyczy to tego, co próbuję zrobić: P Pracuję również na Linux Ubuntu 14.04 z Apache/MySql/PHP 5.4 (myślę) –

Powiązane problemy