搜尋
首頁php框架Laravellaravel支援什麼資料庫

laravel支援什麼資料庫

Feb 14, 2022 pm 03:38 PM
laravel資料庫

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
如何使用Laravel遷移:逐步教程如何使用Laravel遷移:逐步教程May 13, 2025 am 12:15 AM

laravelmigrationsStreamLinedAtabasemangementbyallowingbolAlyChemachangeStobEdeDinedInphpcode,whobeversion-controllolleDandShared.here'showtousethem:1)createMigrationClassestodeFinePerationFineFineOperationsLikeCreatingingModifyingTables.2)

查找最新的Laravel版本:快速簡便的指南查找最新的Laravel版本:快速簡便的指南May 13, 2025 am 12:13 AM

要查找最新版本的Laravel,可以訪問官方網站laravel.com並點擊右上角的"Docs"按鈕,或使用Composer命令"composershowlaravel/framework|grepversions"。保持更新有助於提升項目安全性和性能,但需考慮對現有項目的影響。

使用Laravel的更新:使用最新版本的好處使用Laravel的更新:使用最新版本的好處May 13, 2025 am 12:08 AM

youshouldupdateTotheLateStlaravelVerverSionForPerformanceImprovements,增強的安全性,newfeatures,BetterCommunitySupport,and long-term-Maintenance.1)績效:Laravel9'Selover9'seloquentormoptimizatizationenenhanceApplicationsPeed.2)secuse:laravel8InIntrododeDodecter.2)

Laravel:我搞砸了我的遷移,我該怎麼辦?Laravel:我搞砸了我的遷移,我該怎麼辦?May 13, 2025 am 12:06 AM

當您的inoumessupamigrationInlaravel,youcan:1)滾動播放'phpartisanmigrate:rollback'ifit'Sthelastone,or'phpartisanmigrate:reset'forall; 2)crecteAneAnewmigrateTocorrectRateRectRectRateRectRectRectRectRectRectRectRectErcrationInproduction; 3)

最後的Laravel版本:性能指南最後的Laravel版本:性能指南May 13, 2025 am 12:04 AM

toboostPerformanceInthelateStlaravelversion,關注詳細信息:1)用戶disimpachingtoimproveresponsetimes和Reddicsedatabaseload.2)優化的atabasequesquesquesquesquesquerieswitheAgerloadingTopreventn 1Queryissues.3)emplientroutecachinginprodododododododododuceprouceprouloutrououtrououtrououtrououtrououtersolution。

最新的Laravel版本:DIFES DISCON最新的Laravel版本:DIFES DISCONMay 12, 2025 am 12:15 AM

Laravel10IntroducessEveralKeyFeatUrestHatenHanceWebDevelopment.1)LazyCollectionsAllyCollefficeProcesingOflargeFlargedAtasetSwithSwithOutloadingAllRecordSintomeMemory.2)the Make:Model Model Moged-and-Mogration'ArtisanCommandSancancMommandSimplififieScreatingModeltigation.3)

Laravel遷移解釋了:創建,修改和管理您的數據庫Laravel遷移解釋了:創建,修改和管理您的數據庫May 12, 2025 am 12:11 AM

laravelmigrationssshouldbeusedbecausetheystreamlinedeplupment,nesurecresistencyAcrossenviments和simplifyCollaborationAndDeployment.1)shemallogragrammatonofdatabaseschemachanges,ReeducingErrors.2)MigrigationScanBeverCanbeverSionConconconconcontrollin.2)

Laravel遷移:值得使用嗎?Laravel遷移:值得使用嗎?May 12, 2025 am 12:10 AM

是的。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具