찾다
PHP 프레임워크Laravellaravel은 어떤 데이터베이스를 지원합니까?

laravel은 어떤 데이터베이스를 지원합니까?

Feb 14, 2022 pm 03:38 PM
laravel데이터 베이스

Laravel은 4가지 데이터베이스를 지원합니다: 1. 관계형 데이터베이스 관리 시스템인 MySQL 2. "객체 관계형" 데이터베이스 관리 시스템인 PostgreSQL 3. 경량 관계형 데이터베이스 관리 시스템인 SQLite 데이터베이스 관리 시스템.

laravel은 어떤 데이터베이스를 지원합니까?

이 튜토리얼의 운영 환경: Windows 7 시스템, Laravel 6 버전, Dell G3 컴퓨터.

Laravel은 기본 SQL 쿼리, Fluent 쿼리 빌더 및 Eloquent ORM을 지원하므로 다양한 데이터베이스 백엔드에서 데이터베이스와 매우 간단하게 상호 작용할 수 있습니다.

현재 Laravel은 다음 네 가지 데이터베이스를 지원합니다:

  • MySQL 5.7+: 스웨덴 MySQL AB 회사가 개발한 관계형 데이터베이스 관리 시스템이자 Oracle 제품입니다.

  • PostgreSQL 9.6+: 매우 완벽한 기능을 갖춘 무료 소프트웨어 객체 관계형 데이터베이스 관리 시스템입니다. 이는 캘리포니아 대학교 컴퓨터 과학과에서 개발한 POSTGRES 버전 4.2를 기반으로 하는 객체 관계형 데이터베이스 관리 시스템입니다. .

  • SQLite 3.8.8+: 상대적으로 작은 C 라이브러리에 포함된 ACID 호환 관계형 데이터베이스 관리 시스템인 경량 데이터베이스입니다.

  • SQL Server 2017+: Microsoft에서 출시한 관계형 데이터베이스 관리 시스템

구성

데이터베이스 구성 파일은 config/database.php 파일에 있습니다. 이 파일에서 모든 데이터베이스를 정의할 수 있습니다. 기본 데이터베이스 연결을 지정합니다. 이 파일은 Laravel이 지원하는 대부분의 데이터베이스 구성의 예를 제공합니다.

기본적으로 Laravel의 샘플 환경 구성은 Laravel Homestead(로컬에서 Laravel을 사용하여 쉽게 개발할 수 있는 작은 가상 머신)를 사용합니다. 로컬 데이터베이스의 필요에 따라 이 구성 파일을 수정할 수 있습니다.

SQLite 구성

touch Database/database.sqlite와 같은 생성 명령을 사용하여 새 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 形式配置

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

mysql://root:password@127.0.0.1/forge?charset=UTF-8

SQLite 연결에 대한 외래 키 제약 조건을 활성화하려면 DB_foreign_KEYS 환경 변수를 true로 설정해야 합니다.

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

URLs form 구성

일반적으로 데이터베이스 연결은 여러 구성 값을 사용합니다. 예: 호스트, 데이터베이스, 사용자 이름, 비밀번호 등 이러한 각 구성 값에는 해당 환경 변수가 있습니다. 이는 프로덕션 서버에서 데이터베이스 연결 정보를 구성할 때 관리해야 할 환경 변수가 여러 개 있다는 것을 의미합니다.

Heroku와 같은 일부 관리형 데이터베이스 제공업체는 데이터베이스에 대한 모든 연결 정보를 단일 문자열로 포함하는 단일 데이터베이스 "URL"을 제공합니다. 샘플 데이터베이스 URL은 다음과 같습니다:

'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' => '',
],
$users = DB::connection('foo')->select(...);

편의를 위해 Laravel은 여러 구성 옵션을 사용하여 데이터베이스를 구성하는 대신 이러한 URL을 지원합니다. url(또는 해당 DATABASE_URL 환경 변수) 구성 옵션이 있는 경우 해당 옵션은 데이터베이스 연결 및 자격 증명 정보를 추출하는 데 사용됩니다.

읽기 및 쓰기 분리

때때로 SELECT 문이 하나의 데이터베이스 연결을 사용하고 INSERT, UPDATE 및 DELETE 문이 다른 데이터베이스 연결을 사용하기를 원할 때가 있습니다. Laravel에서는 기본 쿼리, 쿼리 빌더 또는 Eloquent ORM을 사용하여 쉽게 구현할 수 있습니다.

읽기-쓰기 분리가 어떻게 구성되는지 이해하기 위해 먼저 예를 살펴보겠습니다.

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

위 예에서는 구성 배열에 읽기, 쓰기, 고정이라는 세 개의 키가 추가되었습니다. 읽기와 쓰기 모두 키 호스트가 있는 배열을 포함합니다. 읽기 및 쓰기에 대한 다른 데이터베이스 옵션은 mysql 키가 있는 배열에 있습니다.

기본 어레이의 구성을 재정의하려면 읽기 및 쓰기 어레이를 수정하면 됩니다. 따라서 이 예에서 192.168.1.1 및 192.168.1.2는 "읽기"로 호스트에 연결되고, 192.168.1.3은 "쓰기"로 호스트에 연결됩니다. 이 두 연결은 데이터베이스 자격 증명(사용자 이름/비밀번호), 접두사, 문자 인코딩 등과 같은 mysql 배열의 다양한 구성을 공유합니다.

sticky 옵션 ​​

sticky는 현재 요청 주기 동안 데이터베이스에 기록된 레코드를 즉시 읽는 데 사용되는 선택적 값입니다. 고정 옵션이 활성화되고 현재 요청 주기 동안 "쓰기" 작업이 수행되는 경우 모든 "읽기" 작업은 "쓰기" 연결을 사용합니다. 이를 통해 동일한 요청 주기에 기록된 데이터를 즉시 읽을 수 있으므로 마스터-슬레이브 동기화 지연으로 인해 발생하는 데이터 불일치 문제를 방지할 수 있습니다. 그러나 활성화 여부는 애플리케이션의 요구 사항에 따라 다릅니다.

🎜다중 데이터베이스 연결 사용🎜🎜🎜다중 데이터베이스 연결을 사용할 경우 DB Facade Facade의 연결 방식을 통해 각 연결에 접근할 수 있습니다. 연결 메소드에 전달된 매개변수 이름은 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]);
    }
}
🎜 연결 인스턴스에서 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

laravelmigrationsStreamlinedatabasemanumangemanagementBeallowingschemachangestobedefinphpcode, thancanbeversion-controlledandshared. here'showtousem : 1) createMigrationClassEStodeFineOperationsLikecreatingmodifyingtables.2) USETE'PHPARTISANGUPS'COMMA

최신 Laravel 버전 찾기 : 빠르고 쉬운 가이드최신 Laravel 버전 찾기 : 빠르고 쉬운 가이드May 13, 2025 am 12:13 AM

Laravel의 최신 버전을 찾으려면 공식 웹 사이트 Laravel.com을 방문하여 오른쪽 상단의 "문서"버튼을 클릭하거나 작곡가 명령 "Composershowlaravel/Framework | grepversions"를 사용할 수 있습니다. 업데이트를 유지하면 프로젝트 보안 및 성능을 향상시키는 데 도움이 될 수 있지만 기존 프로젝트에 미치는 영향을 고려해야합니다.

Laravel으로 업데이트 상태 : 최신 버전 사용의 이점Laravel으로 업데이트 상태 : 최신 버전 사용의 이점May 13, 2025 am 12:08 AM

당신은 당신의 youshouldupdateThelateStlarViversorperferferferferferferferferferferferformanceimprovements, EnhancedSecurity, NewFeatures, BetterCommunitySupport, andlong-Termmainsupport.1) 성능 : laravel9'seloquentormoptimizationsenhanceplicationspeed.2) 보안 : Laravel8introducedBetter

LARAVEL : 이주를 엉망으로 만들었습니다. 어떻게해야합니까?LARAVEL : 이주를 엉망으로 만들었습니다. 어떻게해야합니까?May 13, 2025 am 12:06 AM

youmessupamigrationinlaravel, youcan : 1) rollbacktheMigrationusing'phpartisanmigrate : rollback'sthelastone, or'phpartisanmigrate : reset'forall; 2) createeanewmigrationtocorrecterrorrorsipalladeyinproduction; 3) editthemectionfiledirectly, butthiStistly, butthiSTISTLY;

마지막 Laravel 버전 : 성능 가이드마지막 Laravel 버전 : 성능 가이드May 13, 2025 am 12:04 AM

toboostperformanceInthelatestLaravelVersion, 다음에 따르면 : 1) userEdisforCachingToImProverSonTimessAndAtAbasEload.2) 최적화 된 ABASEQUERIES.3) ublicateRovingErloadtOpreduprouteresution.

가장 최근의 Laravel 버전 : 새로운 것을 발견하십시오가장 최근의 Laravel 버전 : 새로운 것을 발견하십시오May 12, 2025 am 12:15 AM

LARAVEL10INTRODICESEREVERALKEYFEATERESTERETHANCEBEDEVENCENTMENT.1) LazyCollectionsallowEctiversityProcessingoflargedAgestoutSwithoutlakestougleswithoutlakeStiSwithoutloUgentswithoutloWeDAtSwithOUdlingAllRecordsIntomemory.2) The'Make : Model 및 Mightration 'and Mighting'and Mighting 'and Megigation'ArtisAncommandSimplifiesmomodelSandmagrations.3) Integration

Laravel Migrations 설명 : 데이터베이스 작성, 수정 및 관리Laravel Migrations 설명 : 데이터베이스 작성, 수정 및 관리May 12, 2025 am 12:11 AM

laravelymigrations는 eTheystreamlinedevelopment, ensereconsconsencyacrossenvironments 및 simplifycollaborationanddeployment.1) theavergrammationmanagementofdatabaseSchemachanges, rowingerrors.2) MigrationsCanbeverSioncontrolled, ensurin

LARAVEL MIGRATION : 사용할 가치가 있습니까?LARAVEL MIGRATION : 사용할 가치가 있습니까?May 12, 2025 am 12:10 AM

예, laravelmigrationisworthsing.itsimplifiesDatabaseSchemamanagemanagement, EnhanceScollaboration 및 provostversionControl.useitForstructured, 효율적인 개발.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.