2015-04-23 4 views
9

Ich erstelle eine Anwendung, die Informationen aus einer Reihe von verschiedenen Datenbanken liest, aber keine eigene Datenbank hat, da nirgends Informationen geschrieben werden.Ist es möglich, Laravel 4 ohne eine Standard-Datenbank zu verwenden

Grundsätzlich wählt ein Benutzer einen Datensatz und einen Typ, und die Anwendung generiert eine .pdf Datei basierend auf ihren Entscheidungen. Ich habe mehrere Verbindungen in app/config/database.php definiert, aber ich möchte keine Verbindung zu ihnen standardmäßig herstellen. Gibt es eine Möglichkeit, Laravel nicht zu einer Verbindung mit einer Datenbank zu sagen? Ich habe ein paar Dinge ausprobiert (alle in app/config/database.php), erste ist:

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

der beide Rückkehr:

Undefined index: Treiber

Ich habe auch versucht:

'default' => 'none', 

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

, die wiederum zurückgibt:

Nicht unterstützte Treiber []

Nicht unterstützte Host []

...

Und schließlich 'default' => '' Einstellung, die zurückgibt:

Datenbank [] nicht konfiguriert.

Ich habe Wege gefunden, Laravel-Modelle ohne eine Datenbankverbindung zu verwenden, aber nicht wirklich Laravel selbst.

bearbeiten:

Einstellung die Verbindung zu einer vorhandenen MySQL-Verbindung und keine Datenbank „funktioniert“ die Auswahl:

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

aber ich bin nicht sicher, ob das der richtige Weg, es zu tun . Es fühlt sich an wie eine Umgehungslösung und keine wirkliche Lösung.

+1

Erstellen Sie Ihren eigenen Treiber, der nichts tut? – SamV

+0

Solange Sie es nicht benutzen, wird es nichts tun, also lassen Sie es einfach in Ruhe. – ceejayoz

Antwort

0

Was Sie tun müssen, definieren Sie die Verbindung in der Datei app/config/database.php und geben Sie die Verbindung an, wenn Sie eine Abfrage mit der DB :: connection ('connection_name') von Laravel ausführen. Weitere Informationen hier ->http://laravel.com/docs/4.2/database#accessing-connections

+0

Ich habe das mit allen oben genannten Methoden gemacht. Der einzige, bei dem es funktionierte, ist das letzte Beispiel ohne Datenbank. Die anderen drei verursachten immer noch den gleichen Fehler. Zugriff auf meine 'Route :: get ("/")' namens 'DB :: connection (" Beispiel ") ...' (was nicht die Standarddatenbank war) und immer noch fehlgeschlagen. –

0

Definieren Sie einfach Ihren Datenbanktreiber als 'SQLite' in der Datenbankkonfiguration.

Solange Sie nichts in der Standard-sqlite-Konfiguration geändert haben, sollte alles funktionieren. Sie müssen die Datenbank nicht unbedingt verwenden, aber sie wird die Fehler beheben, die Sie erhalten haben.

Falls Sie die Standard-SQLite-Konfiguration aus welchen Gründen auch immer geändert haben, können Sie die folgenden Schritte ausführen, um die SQLite-Datenbank zu konfigurieren.

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

Also, stellen Sie sicher, dass diese 'production.sqlite' Datei vorhanden ist, wenn es nicht bereits der Fall ist. Sie können diese von der Kommandozeile einfach tun:

touch app/database/production.sqlite 
+0

Rückgabe: '" PDOException: Treiber konnte nicht gefunden werden "'. Siehe Andrew Willis Antwort. –

4

ich folgendes tun würde:

'driver' => 'sqlite', 

und für die sqlite Verbindungseinstellungen

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

Auf diese Weise werden sie verwenden Ein in-memory database und die Datenbank wird nicht mehr existieren, wenn die Datenbankverbindung geschlossen wird, und da Sie keine Verbindung öffnen werden, haben Sie nie eine lokale Datenbank geöffnet.

Sie könnten auch die Datenbank-Service-Provider aus Ihrer app.php Konfigurationsdatei entfernen:

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

und die Fassaden für Fluent und Eloquent in der gleichen Datei:

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

, die Sie davon, dass verhindert werden Sie können sich mit lokalen Datenbanken verbinden und nicht einmal die sqlite Datenbankverbindung starten, die Sie gerade eingerichtet haben.

+0

Gibt einen Fehler zurück, genau wie ich in der letzten Frage, die 'sqlite' als meinen Treiber vorgeschlagen hat:' "PDOException: Treiber konnte nicht gefunden werden" '(Antwort wurde vom Poster gelöscht, war aber im Wesentlichen die gleiche wie Ihre). Außerdem benutze ich immer noch die "DB" - und "Eloquent" -Fassaden, da ich immer noch Informationen aus einer Datenbank abrufe, so scheint die zweite Hälfte Ihrer Frage eine schlechte Idee zu sein. –

+0

Ja, der zweite Teil war mehr für Leute, die die Frage noch einmal überprüften und eine App ohne Datenbank wollten. Nur aus Interesse, welche Umgebung verwenden Sie, um Ihren Code auszuführen? Ich benutze sqlite in Speicherdatenbanken die ganze Zeit für Tests und habe nie ein Problem gefunden, die Treiber nicht zu finden. –

+0

Ja, das macht Sinn, aber es ist nicht anwendbar auf das, was ich versuche: P Auch unter Linux Ubuntu 14.04 mit Apache/MySql/PHP 5.4 (glaube ich) –

Verwandte Themen