Maison cadre php Laravel Quelle base de données Laravel prend-il en charge ?

Quelle base de données Laravel prend-il en charge ?

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

Laravel prend en charge quatre bases de données : 1. MySQL, un système de gestion de bases de données relationnelles ; 2. PostgreSQL, un système de gestion de bases de données « objet-relationnel » ; 3. SQLite, un système de gestion de bases de données relationnelles léger 4. , SQL Server, un système relationnel ; système de gestion de base de données.

Quelle base de données Laravel prend-il en charge ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, version Laravel 6, ordinateur Dell G3.

Laravel prend en charge les requêtes SQL natives, le générateur de requêtes fluide et Eloquent ORM. Ces opérations rendent l'interaction avec la base de données très simple dans divers backends de base de données.

Actuellement, Laravel prend en charge les quatre bases de données suivantes :

  • MySQL 5.7+ : un système de gestion de bases de données relationnelles développé par la société suédoise MySQL AB et un produit d'Oracle.

  • PostgreSQL 9.6+ : Un système de gestion de base de données objet-relationnel logiciel gratuit avec des fonctionnalités très complètes. Il s'agit d'un système de gestion de base de données objet-relationnel basé sur POSTGRES, version 4.2, développé par le Département d'informatique de l'Université de Californie. .

  • SQLite 3.8.8+ : Une base de données légère, un système de gestion de base de données relationnelle conforme à ACID, contenu dans une bibliothèque C relativement petite.

  • SQL Server 2017+ : Un système de gestion de bases de données relationnelles lancé par Microsoft

Configuration

Le fichier de configuration de la base de données est dans le fichier config/database.php Vous pouvez définir toutes les bases de données dans ce fichier Configuration de connexion. et spécifiez la connexion à la base de données par défaut. Ce fichier fournit des exemples de la plupart des configurations de bases de données prises en charge par Laravel.

Par défaut, l'exemple de configuration d'environnement de Laravel utilise Laravel Homestead (c'est une petite machine virtuelle qui vous permet de développer facilement en utilisant Laravel localement). Vous pouvez modifier ce fichier de configuration en fonction des besoins de la base de données locale.

Configuration SQLite

Après avoir créé une nouvelle base de données SQLite à l'aide d'une commande de création telle que touch database/database.sqlite, vous pouvez utiliser le chemin absolu de la base de données pour configurer les variables d'environnement vers lesquelles pointer cette base de données nouvellement créée :touch database/database.sqlite 一类的创建命令,创建了一个新的 SQLite 数据库之后,你就可以使用数据库的绝对路径,配置环境变量来指向这个新创建的数据库:

DB_CONNECTION=sqlite
DB_DATABASE=/absolute/path/to/database.sqlite
Copier après la connexion

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

DB_FOREIGN_KEYS=true
Copier après la connexion

URLs 形式配置

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

mysql://root:password@127.0.0.1/forge?charset=UTF-8
Copier après la connexion

Pour activer les contraintes de clé étrangère pour les connexions SQLite, la variable d'environnement DB_foreign_KEYS doit être définie sur true :

这些 URLs 通常遵循标准模式约定:
driver://username:password@host:port/database?options
Copier après la connexion

Configuration du formulaire URL

Normalement, les connexions à la base de données utilisent plusieurs valeurs de configuration, par exemple, < code>hôte, base de données, nom d'utilisateur, mot de passe, etc. Chacune de ces valeurs de configuration a sa variable d'environnement correspondante. Cela signifie que plusieurs variables d'environnement doivent être gérées lors de la configuration des informations de connexion à la base de données sur le serveur de production.

Certains fournisseurs de bases de données gérées (tels que Heroku) fournissent une seule « URL » de base de données qui contient toutes les informations de connexion à la base de données dans une seule chaîne. Un exemple d'URL de base de données pourrait ressembler à ceci :

&#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;,
],
Copier après la connexion
$users = DB::connection(&#39;foo&#39;)->select(...);
Copier après la connexion

Pour plus de commodité, Laravel prend en charge ces URL comme alternative à la configuration de la base de données à l'aide de plusieurs options de configuration. Si l'option de configuration url (ou la variable d'environnement DATABASE_URL correspondante) est présente, cette option sera utilisée pour extraire les informations de connexion et d'identification de la base de données.

Séparation en lecture et en écriture

Parfois, vous souhaitez que l'instruction SELECT utilise une connexion à la base de données et que les instructions INSERT, UPDATE et DELETE utilisent une autre connexion à la base de données. Dans Laravel, que vous utilisiez des requêtes natives, des générateurs de requêtes ou Eloquent ORM, vous pouvez facilement l'implémenter.

Afin de comprendre comment la séparation lecture-écriture est configurée, regardons d'abord un exemple :

$pdo = DB::connection()->getPdo();
Copier après la connexion
Copier après la connexion

Notez que dans l'exemple ci-dessus, trois clés ont été ajoutées au tableau de configuration, à savoir read, write et sticky. La lecture et l'écriture contiennent un tableau avec la clé hôte. Les autres options de base de données pour la lecture et l'écriture se trouvent dans le tableau avec la clé mysql.

Si vous souhaitez remplacer la configuration dans le tableau principal, modifiez simplement les tableaux de lecture et d'écriture. Ainsi, dans cet exemple : 192.168.1.1 et 192.168.1.2 se connecteront à l'hôte en « lecture », tandis que 192.168.1.3 se connecteront à l'hôte en « écriture ». Ces deux connexions partageront diverses configurations du tableau mysql, telles que les informations d'identification de la base de données (nom d'utilisateur/mot de passe), le préfixe, l'encodage des caractères, etc. L'option

sticky

sticky est une valeur facultative utilisée pour lire immédiatement les enregistrements qui ont été écrits dans la base de données pendant le cycle de requête en cours. Si l'option sticky est activée et qu'une opération « écriture » est effectuée pendant le cycle de requête en cours, toutes les opérations de « lecture » utiliseront la connexion « écriture ». Cela garantit que les données écrites dans le même cycle de requête peuvent être lues immédiatement, évitant ainsi le problème d'incohérence des données provoqué par le retard de synchronisation maître-esclave. Toutefois, son activation dépend des besoins de l'application.

🎜Utilisation de plusieurs connexions à la base de données🎜🎜🎜Lors de l'utilisation de plusieurs connexions à la base de données, vous pouvez accéder à chaque connexion via la méthode de connexion de la façade DB Facade. Le nom du paramètre transmis à la méthode de connexion doit être une valeur dans le tableau connections du fichier de configuration config/database.php : 🎜
<?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]);
    }
}
Copier après la connexion
Copier après la connexion
🎜 Vous pouvez également accéder à l'instance PDO sous-jacente en utilisant la méthode getPdo sur une instance de connexion : 🎜
$pdo = DB::connection()->getPdo();
Copier après la connexion
Copier après la connexion

执行原生 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]);
    }
}
Copier après la connexion
Copier après la connexion

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

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

foreach ($users as $user) {
    echo $user->name;
}
Copier après la connexion

使用命名绑定

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

$results = DB::select(&#39;select * from users where id = :id&#39;, [&#39;id&#39; => 1]);
Copier après la connexion

执行 Insert 语句

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

DB::insert(&#39;insert into users (id, name) values (?, ?)&#39;, [1, &#39;Dayle&#39;]);
Copier après la connexion

执行 Update 语句

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

$affected = DB::update(&#39;update users set votes = 100 where name = ?&#39;, [&#39;John&#39;]);
Copier après la connexion

执行 Delete 语句

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

$deleted = DB::delete(&#39;delete from users&#39;);
Copier après la connexion

执行普通语句

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

DB::statement(&#39;drop table users&#39;);
Copier après la connexion

运行未预处理的语句

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

DB::unprepared(&#39;update users set votes = 100 where name = "Dries"&#39;);
Copier après la connexion

请注意,这些语句不会像上面的语句那样绑定值。它们可以打开你的应用程序进行 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;);
Copier après la connexion

请参考 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
        });
    }
}
Copier après la connexion

数据库事务

你可以使用 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();
});
Copier après la connexion

处理死锁

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

DB::transaction(function () {
    DB::table(&#39;users&#39;)->update([&#39;votes&#39; => 1]);
    DB::table(&#39;posts&#39;)->delete();
}, 5);
Copier après la connexion

手动使用事务

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

DB::beginTransaction();
Copier après la connexion

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

DB::rollBack();
Copier après la connexion

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

DB::commit();
Copier après la connexion

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

连接到数据库 CLI

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

php artisan db
Copier après la connexion

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

php artisan db mysql
Copier après la connexion

【相关推荐:laravel视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

Les dernières versions d'Apple des systèmes iOS18, iPadOS18 et macOS Sequoia ont ajouté une fonctionnalité importante à l'application Photos, conçue pour aider les utilisateurs à récupérer facilement des photos et des vidéos perdues ou endommagées pour diverses raisons. La nouvelle fonctionnalité introduit un album appelé "Récupéré" dans la section Outils de l'application Photos qui apparaîtra automatiquement lorsqu'un utilisateur a des photos ou des vidéos sur son appareil qui ne font pas partie de sa photothèque. L'émergence de l'album « Récupéré » offre une solution aux photos et vidéos perdues en raison d'une corruption de la base de données, d'une application d'appareil photo qui n'enregistre pas correctement dans la photothèque ou d'une application tierce gérant la photothèque. Les utilisateurs n'ont besoin que de quelques étapes simples

Comparaison des dernières versions de Laravel et CodeIgniter Comparaison des dernières versions de Laravel et CodeIgniter Jun 05, 2024 pm 05:29 PM

Les dernières versions de Laravel 9 et CodeIgniter 4 fournissent des fonctionnalités et des améliorations mises à jour. Laravel9 adopte l'architecture MVC et fournit des fonctions telles que la migration de bases de données, l'authentification et le moteur de modèles. CodeIgniter4 utilise l'architecture HMVC pour fournir le routage, l'ORM et la mise en cache. En termes de performances, le modèle de conception basé sur le fournisseur de services de Laravel9 et le framework léger de CodeIgniter4 lui confèrent d'excellentes performances. Dans les applications pratiques, Laravel9 convient aux projets complexes qui nécessitent de la flexibilité et des fonctions puissantes, tandis que CodeIgniter4 convient au développement rapide et aux petites applications.

Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Jun 04, 2024 pm 01:42 PM

Comment utiliser MySQLi pour établir une connexion à une base de données en PHP : Inclure l'extension MySQLi (require_once) Créer une fonction de connexion (functionconnect_to_db) Appeler la fonction de connexion ($conn=connect_to_db()) Exécuter une requête ($result=$conn->query()) Fermer connexion ( $conn->close())

Comment gérer les erreurs de connexion à la base de données en PHP Comment gérer les erreurs de connexion à la base de données en PHP Jun 05, 2024 pm 02:16 PM

Pour gérer les erreurs de connexion à la base de données en PHP, vous pouvez utiliser les étapes suivantes : Utilisez mysqli_connect_errno() pour obtenir le code d'erreur. Utilisez mysqli_connect_error() pour obtenir le message d'erreur. En capturant et en enregistrant ces messages d'erreur, les problèmes de connexion à la base de données peuvent être facilement identifiés et résolus, garantissant ainsi le bon fonctionnement de votre application.

Lequel est le plus adapté aux débutants, Laravel ou CodeIgniter ? Lequel est le plus adapté aux débutants, Laravel ou CodeIgniter ? Jun 05, 2024 pm 07:50 PM

Pour les débutants, CodeIgniter a une courbe d'apprentissage plus douce et moins de fonctionnalités, mais couvre les besoins de base. Laravel offre un ensemble de fonctionnalités plus large mais a une courbe d'apprentissage légèrement plus raide. En termes de performances, Laravel et CodeIgniter fonctionnent bien. Laravel dispose d'une documentation plus complète et d'un support communautaire actif, tandis que CodeIgniter est plus simple, léger et possède de solides fonctionnalités de sécurité. Dans le cas pratique de la création d'une application de blog, EloquentORM de Laravel simplifie la manipulation des données, tandis que CodeIgniter nécessite une configuration plus manuelle.

Laravel - Commandes artisanales Laravel - Commandes artisanales Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands - Laravel 5.7 est livré avec une nouvelle façon de traiter et de tester de nouvelles commandes. Il inclut une nouvelle fonctionnalité de test des commandes artisanales et la démonstration est mentionnée ci-dessous ?

Laravel vs CodeIgniter : quel framework est le meilleur pour les grands projets ? Laravel vs CodeIgniter : quel framework est le meilleur pour les grands projets ? Jun 04, 2024 am 09:09 AM

Lors du choix d'un framework pour de grands projets, Laravel et CodeIgniter ont chacun leurs propres avantages. Laravel est conçu pour les applications d'entreprise, offrant une conception modulaire, une injection de dépendances et un ensemble de fonctionnalités puissantes. CodeIgniter est un framework léger plus adapté aux projets de petite et moyenne taille, mettant l'accent sur la rapidité et la facilité d'utilisation. Pour les grands projets avec des exigences complexes et un grand nombre d'utilisateurs, la puissance et l'évolutivité de Laravel sont plus adaptées. Pour les projets simples ou les situations avec des ressources limitées, les capacités de développement légères et rapides de CodeIgniter sont plus idéales.

Laravel vs CodeIgniter : quel framework est le meilleur pour les petits projets ? Laravel vs CodeIgniter : quel framework est le meilleur pour les petits projets ? Jun 04, 2024 pm 05:29 PM

Pour les petits projets, Laravel convient aux projets plus importants qui nécessitent des fonctionnalités et une sécurité élevées. CodeIgniter convient aux très petits projets qui nécessitent légèreté et facilité d'utilisation.

See all articles