Heim PHP-Framework Laravel Welche Datenbank unterstützt Laravel?

Welche Datenbank unterstützt Laravel?

Feb 14, 2022 pm 03:38 PM
laravel 数据库

Laravel unterstützt vier Datenbanken: 1. MySQL, ein relationales Datenbankverwaltungssystem; 2. PostgreSQL, ein „objektrelationales“ Datenbankverwaltungssystem; 3. SQLite, ein relationales Datenbankverwaltungssystem; Datenbankverwaltungssystem.

Welche Datenbank unterstützt Laravel?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Laravel 6-Version, Dell G3-Computer.

Laravel unterstützt native SQL-Abfragen, Fluent Query Builder und Eloquent ORM. Diese Vorgänge machen die Interaktion mit der Datenbank in verschiedenen Datenbank-Backends sehr einfach.

Derzeit unterstützt Laravel die folgenden vier Datenbanken:

  • MySQL 5.7+: ein relationales Datenbankverwaltungssystem, das von der schwedischen Firma MySQL AB entwickelt wurde und ein Produkt von Oracle ist.

  • PostgreSQL 9.6+: Ein kostenloses objektrelationales Datenbankverwaltungssystem mit sehr umfassenden Funktionen. Es ist ein objektrelationales Datenbankverwaltungssystem, das auf POSTGRES, Version 4.2, basiert und vom Department of Computer Science der University of California entwickelt wurde .

  • SQLite 3.8.8+: Eine leichtgewichtige Datenbank, ein ACID-kompatibles relationales Datenbankverwaltungssystem, das in einer relativ kleinen C-Bibliothek enthalten ist.

  • SQL Server 2017+: Ein von Microsoft gestartetes relationales Datenbankverwaltungssystem

Konfiguration

Die Datenbankkonfigurationsdatei befindet sich in der Datei config/database.php. In dieser Datei können Sie die Verbindungskonfiguration definieren und geben Sie die Standarddatenbankverbindung an. Diese Datei enthält Beispiele für die meisten von Laravel unterstützten Datenbankkonfigurationen.

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

SQLite-Konfiguration

Nachdem Sie mit einem Erstellungsbefehl wie touch Database/database.sqlite eine neue SQLite-Datenbank erstellt haben, können Sie den absoluten Pfad der Datenbank verwenden, um Umgebungsvariablen zu konfigurieren, auf die sie verweisen soll diese neu erstellte Datenbank:touch database/database.sqlite 一类的创建命令,创建了一个新的 SQLite 数据库之后,你就可以使用数据库的绝对路径,配置环境变量来指向这个新创建的数据库:

DB_CONNECTION=sqlite
DB_DATABASE=/absolute/path/to/database.sqlite
Nach dem Login kopieren

若要为 SQLite 连接启用外键约束,应将 DB_foreign_KEYS 环境变量设置为 true:

DB_FOREIGN_KEYS=true
Nach dem Login kopieren

URLs 形式配置

通常,数据库连接使用多个配置值,例如 hostdatabaseusernamepassword

mysql://root:password@127.0.0.1/forge?charset=UTF-8
Nach dem Login kopieren

Um Fremdschlüsseleinschränkungen für SQLite-Verbindungen zu aktivieren, sollte die Umgebungsvariable DB_foreign_KEYS auf true gesetzt werden:

这些 URLs 通常遵循标准模式约定:
driver://username:password@host:port/database?options
Nach dem Login kopieren

URLs bilden die Konfiguration

Normalerweise verwenden Datenbankverbindungen mehrere Konfigurationswerte, zum Beispiel < code>host, database, username, password usw. Jeder dieser Konfigurationswerte hat seine entsprechende Umgebungsvariable. Dies bedeutet, dass beim Konfigurieren der Datenbankverbindungsinformationen auf dem Produktionsserver mehrere Umgebungsvariablen verwaltet werden müssen.

Einige Anbieter verwalteter Datenbanken (z. B. Heroku) stellen eine einzelne Datenbank-URL bereit, die alle Verbindungsinformationen für die Datenbank in einer einzigen Zeichenfolge enthält. Eine Beispiel-Datenbank-URL könnte wie folgt aussehen:

&#39;mysql&#39; => [
    &#39;read&#39; => [
        &#39;host&#39; => [
            &#39;192.168.1.1&#39;,
            &#39;196.168.1.2&#39;,
        ],
    ],
    &#39;write&#39; => [
        &#39;host&#39; => [
            &#39;196.168.1.3&#39;,
        ],
    ],
    &#39;sticky&#39; => true,
    &#39;driver&#39; => &#39;mysql&#39;,
    &#39;database&#39; => &#39;database&#39;,
    &#39;username&#39; => &#39;root&#39;,
    &#39;password&#39; => &#39;&#39;,
    &#39;charset&#39; => &#39;utf8mb4&#39;,
    &#39;collation&#39; => &#39;utf8mb4_unicode_ci&#39;,
    &#39;prefix&#39; => &#39;&#39;,
],
Nach dem Login kopieren
$users = DB::connection(&#39;foo&#39;)->select(...);
Nach dem Login kopieren

Der Einfachheit halber unterstützt Laravel diese URLs als Alternative zur Konfiguration der Datenbank mithilfe mehrerer Konfigurationsoptionen. Wenn die Konfigurationsoption „URL“ (oder die entsprechende Umgebungsvariable „DATABASE_URL“) vorhanden ist, wird diese Option zum Extrahieren von Datenbankverbindungs- und Anmeldeinformationen verwendet.

Lese- und Schreibtrennung

Manchmal möchten Sie, dass die SELECT-Anweisung eine Datenbankverbindung verwendet und die INSERT-, UPDATE- und DELETE-Anweisungen eine andere Datenbankverbindung. Unabhängig davon, ob Sie native Abfragen, Abfrage-Builder oder Eloquent ORM verwenden, können Sie es in Laravel problemlos implementieren.

Um zu verstehen, wie die Lese-Schreib-Trennung konfiguriert ist, schauen wir uns zunächst ein Beispiel an:

$pdo = DB::connection()->getPdo();
Nach dem Login kopieren
Nach dem Login kopieren

Beachten Sie, dass im obigen Beispiel drei Schlüssel zum Konfigurationsarray hinzugefügt wurden, nämlich Lesen, Schreiben und Sticky. Sowohl Lese- als auch Schreibzugriff enthalten ein Array mit dem Schlüsselhost. Die anderen Datenbankoptionen zum Lesen und Schreiben befinden sich im Array mit dem Schlüssel mysql.

Wenn Sie die Konfiguration im Hauptarray überschreiben möchten, ändern Sie einfach die Lese- und Schreibarrays. In diesem Beispiel stellen also 192.168.1.1 und 192.168.1.2 als „Lesen“ eine Verbindung zum Host her, während 192.168.1.3 als „Schreiben“ eine Verbindung zum Host herstellt. Diese beiden Verbindungen teilen sich verschiedene Konfigurationen des MySQL-Arrays, wie z. B. Datenbankanmeldeinformationen (Benutzername/Passwort), Präfix, Zeichenkodierung usw. Die

sticky-Option

sticky ist ein optionaler Wert, der zum sofortigen Lesen von Datensätzen verwendet wird, die während des aktuellen Anforderungszyklus in die Datenbank geschrieben wurden. Wenn die Sticky-Option aktiviert ist und während des aktuellen Anforderungszyklus ein „Schreib“-Vorgang ausgeführt wird, verwenden alle „Lese“-Vorgänge die „Schreib“-Verbindung. Dadurch wird sichergestellt, dass im selben Anforderungszyklus geschriebene Daten sofort gelesen werden können, wodurch das Problem der Dateninkonsistenz durch Master-Slave-Synchronisationsverzögerungen vermieden wird. Ob dies aktiviert werden soll, hängt jedoch von den Anforderungen der Anwendung ab.

🎜Verwendung mehrerer Datenbankverbindungen🎜🎜🎜Bei Verwendung mehrerer Datenbankverbindungen können Sie über die Verbindungsmethode der DB Facade-Fassade auf jede Verbindung zugreifen. Der an die Verbindungsmethode übergebene Parametername sollte ein Wert im Connections-Array in der Konfigurationsdatei config/database.php sein: 🎜
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class UserController extends Controller
{
    /**
     * 显示应用程序中所有用户的列表
     *
     * @return Response
     */
    public function index()
    {
        $users = DB::select(&#39;select * from users where active = ?&#39;, [1]);
        return view(&#39;user.index&#39;, [&#39;users&#39; => $users]);
    }
}
Nach dem Login kopieren
Nach dem Login kopieren
🎜 Sie können auch mit der getPdo-Methode einer Verbindungsinstanz auf die zugrunde liegende PDO-Instanz zugreifen: 🎜
$pdo = DB::connection()->getPdo();
Nach dem Login kopieren
Nach dem Login kopieren

执行原生 SQL 查询

一旦配置好数据库连接后,便可以使用 DB facade 门面运行查询。DB facade 为每种类型的查询提供了相应的方法:select,update,insert,delete 和 statement。

执行 Select 查询

你可以使用 DB Facade 的 select 方法来运行基础的查询语句:

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
class UserController extends Controller
{
    /**
     * 显示应用程序中所有用户的列表
     *
     * @return Response
     */
    public function index()
    {
        $users = DB::select(&#39;select * from users where active = ?&#39;, [1]);
        return view(&#39;user.index&#39;, [&#39;users&#39; => $users]);
    }
}
Nach dem Login kopieren
Nach dem Login kopieren

传递给 select 方法的第一个参数就是一个原生的 SQL 查询,而第二个参数则是需要绑定到查询中的参数值。通常,这些值用于约束 where 语句。参数绑定可以防止 SQL 注入。

select 方法将始终返回一个 array 数组,数组中的每个结果都是一个 stdClass 对象,可以像下面这样访问结果中的数值:

foreach ($users as $user) {
    echo $user->name;
}
Nach dem Login kopieren

使用命名绑定

除了使用 ? 表示参数绑定外,你还可以使用命名绑定的形式来执行一个查询:

$results = DB::select(&#39;select * from users where id = :id&#39;, [&#39;id&#39; => 1]);
Nach dem Login kopieren

执行 Insert 语句

你可以使用 DB Facade 的 insert 方法来执行 insert 语句。与 select 方法一样,该方法将原生 SQL 查询作为其第一个参数,并将绑定的数据作为第二个参数:

DB::insert(&#39;insert into users (id, name) values (?, ?)&#39;, [1, &#39;Dayle&#39;]);
Nach dem Login kopieren

执行 Update 语句

update 方法用于更新数据库中现有的记录。该方法返回该执行语句影响的行数:

$affected = DB::update(&#39;update users set votes = 100 where name = ?&#39;, [&#39;John&#39;]);
Nach dem Login kopieren

执行 Delete 语句

delete 方法用于从数据库中删除记录。与 update 方法一样,返回受该执行语句影响的行数:

$deleted = DB::delete(&#39;delete from users&#39;);
Nach dem Login kopieren

执行普通语句

有些数据库语句不会有任何返回值。对于这些语句,你可以使用 DB Facade 的 statement 方法来运行:

DB::statement(&#39;drop table users&#39;);
Nach dem Login kopieren

运行未预处理的语句

有时你可能希望在不绑定任何值的情况下运行语句。对于这些类型的操作,可以使用 DB Facade 的 unprepared 方法:

DB::unprepared(&#39;update users set votes = 100 where name = "Dries"&#39;);
Nach dem Login kopieren

请注意,这些语句不会像上面的语句那样绑定值。它们可以打开你的应用程序进行 SQL 注入,应该非常小心地使用。

隐式提交

在事务中使用 DB 外观的 statement 和 unprepared 方法时,必须小心避免导致 [隐式提交] 的语句 (https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html)。 这些语句将导致数据库引擎间接提交整个事务,从而使 Laravel 不知道数据库的事务级别。这种语句的一个例子是创建数据库表:

DB::unprepared(&#39;create table a (col varchar(1) null)&#39;);
Nach dem Login kopieren

请参考 MySQL 手册中的触发隐式提交的所有语句列表。

监听查询事件

如果你想监控程序执行的每一个 SQL 查询,你可以使用 listen 方法。这个方法对于记录查询或调试非常有用。你可以在 服务提供器 中注册你的查询监听器:

<?php
namespace App\Providers;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
    /**
     * 注册所有应用的服务
     *
     * @return void
     */
    public function register()
    {
        //
    }
    /**
     * 引导所有应用的服务
     *
     * @return void
     */
    public function boot()
    {
        DB::listen(function ($query) {
            // $query->sql
            // $query->bindings
            // $query->time
        });
    }
}
Nach dem Login kopieren

数据库事务

你可以使用 DB facade 的 transaction 方法在数据库事务中运行一组操作。如果事务的闭包 Closure 中出现一个异常,事务将会回滚。如果事务闭包 Closure 执行成功,事务将自动提交。一旦你使用了 transaction, 就不必担心手动回滚或提交的问题:

DB::transaction(function () {
    DB::table(&#39;users&#39;)->update([&#39;votes&#39; => 1]);
    DB::table(&#39;posts&#39;)->delete();
});
Nach dem Login kopieren

处理死锁

transaction 方法接受一个可选的第二个参数,该参数用来表示事务发生死锁时重复执行的次数。一旦定义的次数尝试完毕,就会抛出一个异常:

DB::transaction(function () {
    DB::table(&#39;users&#39;)->update([&#39;votes&#39; => 1]);
    DB::table(&#39;posts&#39;)->delete();
}, 5);
Nach dem Login kopieren

手动使用事务

如果你想要手动开始一个事务,并且对回滚和提交能够完全控制,那么你可以使用 DB Facade 的 beginTransaction 方法:

DB::beginTransaction();
Nach dem Login kopieren

你可以使用 rollBack 方法回滚事务:

DB::rollBack();
Nach dem Login kopieren

最后,你可以使用 commit 方法提交事务:

DB::commit();
Nach dem Login kopieren

技巧:DB facade 的事务方法同样适用于 查询构造器 和 Eloquent ORM。

连接到数据库 CLI

如果要连接到数据库的 CLI,可以使用 db Artisan 命令:

php artisan db
Nach dem Login kopieren

如果需要,可以指定数据库连接名称以连接到不是默认连接的数据库连接:

php artisan db mysql
Nach dem Login kopieren

【相关推荐:laravel视频教程

Das obige ist der detaillierte Inhalt vonWelche Datenbank unterstützt Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen iOS 18 fügt eine neue Albumfunktion „Wiederhergestellt' hinzu, um verlorene oder beschädigte Fotos wiederherzustellen Jul 18, 2024 am 05:48 AM

Apples neueste Versionen der iOS18-, iPadOS18- und macOS Sequoia-Systeme haben der Fotoanwendung eine wichtige Funktion hinzugefügt, die Benutzern dabei helfen soll, aus verschiedenen Gründen verlorene oder beschädigte Fotos und Videos einfach wiederherzustellen. Mit der neuen Funktion wird im Abschnitt „Extras“ der Fotos-App ein Album mit dem Namen „Wiederhergestellt“ eingeführt, das automatisch angezeigt wird, wenn ein Benutzer Bilder oder Videos auf seinem Gerät hat, die nicht Teil seiner Fotobibliothek sind. Das Aufkommen des Albums „Wiederhergestellt“ bietet eine Lösung für Fotos und Videos, die aufgrund einer Datenbankbeschädigung verloren gehen, die Kameraanwendung nicht korrekt in der Fotobibliothek speichert oder eine Drittanbieteranwendung die Fotobibliothek verwaltet. Benutzer benötigen nur wenige einfache Schritte

Vergleich der neuesten Versionen von Laravel und CodeIgniter Vergleich der neuesten Versionen von Laravel und CodeIgniter Jun 05, 2024 pm 05:29 PM

Die neuesten Versionen von Laravel 9 und CodeIgniter 4 bieten aktualisierte Funktionen und Verbesserungen. Laravel9 übernimmt die MVC-Architektur und bietet Funktionen wie Datenbankmigration, Authentifizierung und Template-Engine. CodeIgniter4 nutzt die HMVC-Architektur, um Routing, ORM und Caching bereitzustellen. In Bezug auf die Leistung sorgen das auf Dienstanbietern basierende Designmuster von Laravel9 und das leichte Framework von CodeIgniter4 für eine hervorragende Leistung. In praktischen Anwendungen eignet sich Laravel9 für komplexe Projekte, die Flexibilität und leistungsstarke Funktionen erfordern, während CodeIgniter4 für schnelle Entwicklung und kleine Anwendungen geeignet ist.

Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Ausführliches Tutorial zum Herstellen einer Datenbankverbindung mit MySQLi in PHP Jun 04, 2024 pm 01:42 PM

So verwenden Sie MySQLi zum Herstellen einer Datenbankverbindung in PHP: MySQLi-Erweiterung einbinden (require_once) Verbindungsfunktion erstellen (functionconnect_to_db) Verbindungsfunktion aufrufen ($conn=connect_to_db()) Abfrage ausführen ($result=$conn->query()) Schließen Verbindung ( $conn->close())

Umgang mit Datenbankverbindungsfehlern in PHP Umgang mit Datenbankverbindungsfehlern in PHP Jun 05, 2024 pm 02:16 PM

Um Datenbankverbindungsfehler in PHP zu behandeln, können Sie die folgenden Schritte ausführen: Verwenden Sie mysqli_connect_errno(), um den Fehlercode abzurufen. Verwenden Sie mysqli_connect_error(), um die Fehlermeldung abzurufen. Durch die Erfassung und Protokollierung dieser Fehlermeldungen können Datenbankverbindungsprobleme leicht identifiziert und behoben werden, wodurch der reibungslose Betrieb Ihrer Anwendung gewährleistet wird.

Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Was ist einsteigerfreundlicher: Laravel oder CodeIgniter? Jun 05, 2024 pm 07:50 PM

Für Anfänger bietet CodeIgniter eine sanftere Lernkurve und weniger Funktionen, deckt aber die Grundbedürfnisse ab. Laravel bietet einen größeren Funktionsumfang, weist jedoch eine etwas steilere Lernkurve auf. In Bezug auf die Leistung schneiden sowohl Laravel als auch CodeIgniter gut ab. Laravel verfügt über eine umfangreichere Dokumentation und aktive Community-Unterstützung, während CodeIgniter einfacher und leichtgewichtiger ist und über starke Sicherheitsfunktionen verfügt. Im praktischen Fall der Erstellung einer Blogging-Anwendung vereinfacht EloquentORM von Laravel die Datenmanipulation, während CodeIgniter mehr manuelle Konfiguration erfordert.

Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für große Projekte? Jun 04, 2024 am 09:09 AM

Bei der Auswahl eines Frameworks für große Projekte haben Laravel und CodeIgniter jeweils ihre eigenen Vorteile. Laravel ist für Anwendungen auf Unternehmensebene konzipiert und bietet modularen Aufbau, Abhängigkeitsinjektion und einen leistungsstarken Funktionsumfang. CodeIgniter ist ein leichtes Framework, das sich eher für kleine bis mittelgroße Projekte eignet und Wert auf Geschwindigkeit und Benutzerfreundlichkeit legt. Für große Projekte mit komplexen Anforderungen und einer großen Anzahl von Benutzern sind die Leistung und Skalierbarkeit von Laravel besser geeignet. Für einfache Projekte oder Situationen mit begrenzten Ressourcen sind die leichten und schnellen Entwicklungsfunktionen von CodeIgniter idealer.

Laravel – Handwerkerbefehle Laravel – Handwerkerbefehle Aug 27, 2024 am 10:51 AM

Laravel – Artisan Commands – Laravel 5.7 bietet eine neue Möglichkeit, neue Befehle zu behandeln und zu testen. Es enthält eine neue Funktion zum Testen von Handwerkerbefehlen und die Demonstration wird unten erwähnt?

Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Laravel vs CodeIgniter: Welches Framework ist besser für kleine Projekte? Jun 04, 2024 pm 05:29 PM

Für kleine Projekte eignet sich Laravel, für größere Projekte, die starke Funktionalität und Sicherheit erfordern. CodeIgniter eignet sich für sehr kleine Projekte, die geringes Gewicht und Benutzerfreundlichkeit erfordern.

See all articles