首頁  >  文章  >  php框架  >  laravel支援什麼資料庫

laravel支援什麼資料庫

青灯夜游
青灯夜游原創
2022-02-14 15:38:172513瀏覽

laravel支援四種資料庫:1、MySQL,一個關聯式資料庫管理系統;2、PostgreSQL,一個「物件-關聯」型資料庫管理系統;3、SQLite,一款輕型的關聯式資料庫管理系統;4、SQL Server,一款關係型資料庫管理系統。

laravel支援什麼資料庫

本教學操作環境:windows7系統、Laravel6版、Dell G3電腦。

Laravel 支援原生的 SQL 查詢、流暢的查詢建構器 和 Eloquent ORM 這些操作在各種資料庫後台與資料庫的互動變得非常簡單。

目前Laravel 支援以下四個資料庫:

  • MySQL 5.7 :一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,屬於Oracle 旗下產品。

  • PostgreSQL 9.6 :一個特性非常齊全的自由軟體的物件-關聯式資料庫管理系統,是以加州大學電腦系開發的POSTGRES,4.2版本為基礎的物件關係型資料庫管理系統。

  • SQLite 3.8.8 :一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它包含在一個相對小的C函式庫中。

  • SQL Server 2017 :Microsoft 公司推出的關係型資料庫管理系統

##設定

##資料庫的設定檔在config/database.php 檔案中,你可以在這個檔案中定義所有的資料庫連線配置,並指定預設的資料庫連線。這個檔案中提供了大部分 Laravel 能夠支援的資料庫設定範例。

預設情況下,Laravel 的範例 環境配置 使用了 Laravel Homestead(它是一種小型的虛擬機,能夠讓你很方便地在本地使用 Laravel 進行開發)。你可以根據本地資料庫的需要修改這個設定檔。

SQLite 設定

在使用

touch database/database.sqlite

一類的建立指令,建立了一個新的SQLite 資料庫之後,你就可以使用資料庫的絕對路徑,配置環境變數來指向這個新建立的資料庫:

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

若要為SQLite 連線啟用外鍵約束,應將DB_foreign_KEYS 環境變數設為true:

DB_FOREIGN_KEYS=true

URLs 形式配置

通常,資料庫連線使用多個設定值,例如host

database

usernamepassword

等。這些配置值中的每一個都有其對應的環境變數。這意味著在生產伺服器上配置資料庫連接資訊時,需要管理多個環境變數。

一些託管資料庫提供者(如 Heroku)提供單一資料庫“URL”,該 URL 在單一字串中包含資料庫的所有連接資訊。範例資料庫 URL 可能如下所示:

mysql://root:password@127.0.0.1/forge?charset=UTF-8
这些 URLs 通常遵循标准模式约定:
driver://username:password@host:port/database?options

為了方便起見,Laravel 支援這些 URLs,作為使用多個設定選項來配置資料庫的替代方法。如果存在 url(或對應的 DATABASE_URL 環境變數)配置選項,則將使用此選項提取資料庫連線和憑證資訊。 #########讀寫分離#########有時你希望 SELECT 語句使用一個資料庫連接,而 INSERT、UPDATE 和 DELETE 語句使用另一個資料庫連接。在 Laravel 中,無論你是使用原生查詢,查詢建構器,或是 Eloquent ORM,都能輕鬆的實作。 ######為了弄清楚讀寫分離是如何配置的,我們先來看個例子:###
'mysql' => [
    'read' => [
        'host' => [
            '192.168.1.1',
            '196.168.1.2',
        ],
    ],
    'write' => [
        'host' => [
            '196.168.1.3',
        ],
    ],
    'sticky' => true,
    'driver' => 'mysql',
    'database' => 'database',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
],
####注意在以上的例子中,配置數組中增加了三個鍵,分別是read 、write 和sticky。 read 和 write 都包含一個鍵為 host 的陣列。而 read 和 write 的其他資料庫選項都在鍵為 mysql 的陣列中。 ######如果你想重寫主數組中的配置,只需要修改 read 和 write 陣列即可。所以,這個範例中:192.168.1.1 和 192.168.1.2 將作為 “讀” 連接主機,而 192.168.1.3 將作為 “寫” 連接主機。這兩個連線會共用 mysql 陣列的各項配置,如資料庫的憑證(使用者名稱 / 密碼),前綴,字元編碼等。 #########sticky 選項#########sticky 是一個 可選值,它用於立即讀取在目前請求週期內已寫入資料庫的記錄。若 sticky 選項啟用,且目前請求週期內執行過「寫入」操作,那麼任何「讀取」操作都會使用「寫入」連線。這樣可確保同一個請求週期內寫入的資料可以立即讀取到,從而避免主從同步延遲導致資料不一致的問題。不過是否啟用它,取決於應用程式的需求。 #########使用多資料庫連線#########當使用多資料庫連線時,你可以透過 DB Facade 門面的 connection 方法存取每一個連線。傳遞給connection 方法的參數name 應該是config/database.php 設定檔中connections 陣列中的一個值:###
$users = DB::connection('foo')->select(...);
###你也可以使用一個連線實例上的getPdo 方法存取底層的PDO 實例:## #
$pdo = DB::connection()->getPdo();

执行原生 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]);
    }
}

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

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

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

使用命名绑定

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

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

执行 Insert 语句

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

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

执行 Update 语句

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

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

执行 Delete 语句

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

$deleted = DB::delete(&#39;delete from users&#39;);

执行普通语句

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

DB::statement(&#39;drop table users&#39;);

运行未预处理的语句

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

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

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

请参考 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
        });
    }
}

数据库事务

你可以使用 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();
});

处理死锁

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

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

手动使用事务

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

DB::beginTransaction();

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

DB::rollBack();

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

DB::commit();

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

连接到数据库 CLI

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

php artisan db

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

php artisan db mysql

【相关推荐:laravel视频教程

以上是laravel支援什麼資料庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn