Einführung in Laravel

Datenbanken: Erste Schritte

Einführung

Laravel kann natives SQL, Query Builder  und  Eloquent ORM nutzen  , um ganz einfach in verschiedenen Datenbank-Backends mit der Datenbank zu interagieren. Derzeit unterstützt Laravel vier Datenbanken:

  • MySQL
  • Postgres
  • SQLite
  • SQL Server

Aufbau

Die Datenbankkonfigurationsdatei wird in  config/database.php der Datei abgelegt, in der Sie alle Datenbankverbindungen definieren und die zu verwendende Standardverbindung angeben können. Diese Datei enthält Beispiele für die meisten von Laravel unterstützten Datenbankkonfigurationen.

Standardmäßig   verwendet  die Beispielumgebungskonfiguration von Laravel Laravel Homestead (dies ist eine kleine virtuelle Maschine, mit der Sie Laravel problemlos lokal entwickeln können). Sie können diese Konfiguration entsprechend den Anforderungen Ihrer lokalen Datenbank ändern.

SQLite-Konfiguration

Nachdem Sie mit einem Befehl wie  diesem touch database/database.sqlite eine neue SQLite-Datenbank erstellt haben , können Sie die Umgebungsvariable so konfigurieren, dass sie auf die neu erstellte Datenbank verweist, indem Sie den absoluten Pfad der Datenbank verwenden:

DB_CONNECTION=sqlite
DB_DATABASE=/absolute/path/to/database.sqlite

Lese- und Schreibverbindungen

Manchmal möchten Sie, dass die SELECT-Anweisung eine Datenbankverbindung verwendet und die INSERT-, UPDATE- und DELETE-Anweisungen eine andere Datenbankverbindung. Dies ist in Laravel ein Kinderspiel, egal ob Sie native Abfragen, Abfrage-Builder oder das Eloquent ORM verwenden.

Um zu verstehen, wie die Lese-/Schreibtrennung der Datenbank konfiguriert wird, schauen wir uns dieses Beispiel an:

'mysql' => [
    'read' => [
        'host' => '192.168.1.1',
    ],
    'write' => [
        'host' => '196.168.1.2'
    ],
    'sticky'    => true,
    'driver'    => 'mysql',
    'database'  => 'database',
    'username'  => 'root',
    'password'  => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix'    => '',
],

Beachten Sie, dass im obigen Beispiel drei Schlüssel zum Konfigurationsarray hinzugefügt wurden:  read, write und  stickyread und  write beide enthalten ein  host Array mit key . read Die anderen  write Datenbankkonfigurationen von und befinden sich im Hauptarray mit dem  Schlüssel  mysql :

Wenn Sie ein Konfigurationselement im Hauptarray überschreiben möchten, fügen Sie es einfach in das  read und-  write Array ein. In diesem Beispiel wird also Folgendes  192.168.1.1 als Host für „Lese“-Verbindungen und  192.168.1.2 als Host für „Schreib“-Verbindungen verwendet. Die beiden Verbindungen teilen sich  mysqlverschiedene Konfigurationen des Hauptarrays, z. B. Datenbankanmeldeinformationen, Präfix, Zeichenkodierung usw.

sticky Optionen

sticky ist ein  optionaler  Wert, der zum sofortigen Lesen von Datensätzen verwendet werden kann, die während des aktuellen Anforderungszyklus in die Datenbank geschrieben wurden. Wenn sticky diese Option aktiviert ist und während des aktuellen Anforderungszyklus ein „Schreib“-Vorgang ausgeführt wurde, verwenden alle „Lese“-Vorgänge die „Schreib“-Verbindung. Dadurch wird sichergestellt, dass im selben Zyklus geschriebene Daten sofort im selben Zyklus gelesen werden können. Ob es aktiviert ist oder nicht, hängt von den Anforderungen der Anwendung ab.

Verwenden Sie mehrere Datenbankverbindungen

Wenn Sie mehrere Datenbankverbindungen verwenden, können Sie  über DB die Fassadenmethode  connection auf jede Verbindung zugreifen . Durch  die Übergabe name als  connection Parameter an die Methode können Sie  config/database.php die Verbindung mit dem entsprechenden Namen in der Konfigurationsdatei verwenden:

$users = DB::connection('foo')->select(...);

Sie können auch über Methoden einer verbundenen Instanz auf die zugrunde liegende PDO-Instanz zugreifen  getPdo :

$pdo = DB::connection()->getPdo();

Führen Sie native SQL-Abfragen aus

Nachdem Sie die Datenbankverbindung konfiguriert haben, können Sie  DB die Fassade zum Ausführen von Abfragen verwenden. DB Die Facade stellt Methoden für jeden Abfragetyp bereit   :  select ,  update ,   und  .insertdeletestatement

Führen Sie die Select-Abfrage aus

Sie können  DB Facade-  select Methoden verwenden, um grundlegende Abfragen auszuführen:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
    /**
     * 显示所有应用程序的用户列表
     *
     * @return Response
     */
    public function index()
    {
        $users = DB::select('select * from users where active = ?', [1]);

        return view('user.index', ['users' => $users]);
    }
}

Der erste an die Methode übergebene  Parameter select ist eine native SQL-Abfrage und der zweite Parameter ist der Parameterwert, der an die Abfrage gebunden werden muss. Normalerweise werden diese Werte in Einschränkungsanweisungen verwendet  where . Die Parameterbindung wird verwendet, um eine SQL-Injection zu verhindern.

select Die Methode gibt immer ein Array zurück, jedes Ergebnis im Array ist ein  StdClass Objekt und auf den Ergebniswert kann wie unten beschrieben zugegriffen werden

foreach ($users as $user) {
    echo $user->name;
}

Verwenden Sie benannte Bindungen

Zusätzlich zur  ? Darstellung von Parameterbindungen können Sie benannte Bindungen auch zum Ausführen einer Abfrage verwenden:

$results = DB::select('select * from users where id = :id', ['id' => 1]);

Führen Sie die INSERT-Anweisung aus

Sie können  DB Facade-  insert Methoden verwenden, um Anweisungen auszuführen  insert . Wie  select bei verwendet diese Methode die native SQL-Abfrage als ersten Parameter und die gebundenen Daten als zweiten Parameter:

DB::insert('insert into users (id, name) values (?, ?)', [1, 'Dayle']);

Führen Sie die Update-Anweisung aus

update Die Methode wird verwendet, um vorhandene Datensätze in der Datenbank zu aktualisieren. Diese Methode gibt die Anzahl der von der Anweisung betroffenen Zeilen zurück:

$affected = DB::update('update users set votes = 100 where name = ?', ['John']);

Führen Sie die Löschanweisung aus

delete Die Methode wird zum Löschen von Datensätzen aus der Datenbank verwendet. Gibt wie  update folgt die Anzahl der von der Anweisung betroffenen Zeilen zurück:

$deleted = DB::delete('delete from users');

Führen Sie gewöhnliche Anweisungen aus

Einige Datenbankanweisungen geben keinen Wert zurück. Für diese Anweisungen können Sie  DB die Facade-  statement Methode verwenden, um Folgendes auszuführen:

DB::statement('drop table users');

Warten Sie auf Abfrageereignisse

Wenn Sie jede von Ihrem Programm ausgeführte SQL-Abfrage überwachen möchten, können Sie  listen die Methode verwenden. Diese Methode eignet sich zum Protokollieren von Abfragen oder zum Debuggen. Sie können   Ihren Abfrage-Listener beim Dienstanbieter registrieren:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * 启动应用服务
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function ($query) {
            // $query->sql
            // $query->bindings
            // $query->time
        });
    }

    /**
     * 注册服务提供器
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

Datenbanktransaktion

Sie können  DB Fassadenmethoden  verwenden transaction , um eine Reihe von Vorgängen innerhalb einer Datenbanktransaktion auszuführen. Wenn  Closure während der Transaktion eine Ausnahme auftritt, wird die Transaktion zurückgesetzt. Bei  Closure erfolgreicher Ausführung wird die Transaktion automatisch festgeschrieben. Sie müssen sich  transaction bei der Verwendung der folgenden Methoden keine Gedanken über ein manuelles Rollback oder Commit machen:

DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);

    DB::table('posts')->delete();
});

Behandeln Sie Deadlocks

transaction Die Methode akzeptiert einen optionalen zweiten Parameter, der die Anzahl der Wiederholungsversuche angibt, wenn die Transaktion blockiert. Sobald diese Versuche erschöpft sind, wird eine Ausnahme ausgelöst:

DB::transaction(function () {
    DB::table('users')->update(['votes' => 1]);

    DB::table('posts')->delete();
}, 5);

Transaktionen manuell verwenden

Wenn Sie eine Transaktion manuell starten und die volle Kontrolle über Rollback und Commit haben möchten, können Sie   Methoden an der Fassade DB verwenden  :beginTransaction

DB::beginTransaction();

Sie können  rollBack eine Transaktion mit der folgenden Methode zurücksetzen:

DB::rollBack();

Schließlich können Sie  commit die Transaktion mit der folgenden Methode festschreiben:

DB::commit();

{tip}  DB Die Transaktionsmethoden der Fassade gelten auch für  den Abfrage-Builder  und  Eloquent ORM .

Ich denke du magst

Origin blog.csdn.net/xyy_forever/article/details/82837941
Empfohlen
Rangfolge