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

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은 다음과 같습니다:

&#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;,
],
로그인 후 복사
$users = DB::connection(&#39;foo&#39;)->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으로 문의하세요.

핫 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 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Laravel과 CodeIgniter의 최신 버전 비교 Laravel과 CodeIgniter의 최신 버전 비교 Jun 05, 2024 pm 05:29 PM

Laravel 9 및 CodeIgniter 4의 최신 버전은 업데이트된 기능과 개선 사항을 제공합니다. Laravel9은 MVC 아키텍처를 채택하여 데이터베이스 마이그레이션, 인증, 템플릿 엔진 등의 기능을 제공합니다. CodeIgniter4는 HMVC 아키텍처를 사용하여 라우팅, ORM 및 캐싱을 제공합니다. 성능면에서는 Laravel9의 서비스 제공자 기반 디자인 패턴과 CodeIgniter4의 경량 프레임워크가 뛰어난 성능을 제공합니다. 실제 애플리케이션에서 Laravel9은 유연성과 강력한 기능이 필요한 복잡한 프로젝트에 적합한 반면, CodeIgniter4는 빠른 개발 및 소규모 애플리케이션에 적합합니다.

iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. Jul 18, 2024 am 05:48 AM

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

Laravel - 장인 명령 Laravel - 장인 명령 Aug 27, 2024 am 10:51 AM

Laravel - Artisan Commands - Laravel 5.7은 새로운 명령을 처리하고 테스트하는 새로운 방법을 제공합니다. 여기에는 장인 명령을 테스트하는 새로운 기능이 포함되어 있으며 데모는 아래에 언급되어 있습니다.

PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 Jun 04, 2024 pm 01:42 PM

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

PHP에서 데이터베이스 연결 오류를 처리하는 방법 PHP에서 데이터베이스 연결 오류를 처리하는 방법 Jun 05, 2024 pm 02:16 PM

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

Laravel과 CodeIgniter 중 어느 것이 더 초보자에게 적합합니까? Laravel과 CodeIgniter 중 어느 것이 더 초보자에게 적합합니까? Jun 05, 2024 pm 07:50 PM

초보자의 경우 CodeIgniter는 학습 곡선이 더 완만하고 기능이 적지만 기본적인 요구 사항을 충족합니다. Laravel은 더 넓은 기능 세트를 제공하지만 학습 곡선이 약간 더 가파릅니다. 성능면에서는 Laravel과 CodeIgniter 모두 좋은 성능을 보입니다. Laravel은 보다 광범위한 문서와 적극적인 커뮤니티 지원을 제공하는 반면 CodeIgniter는 더 간단하고 가벼우며 강력한 보안 기능을 갖추고 있습니다. 블로그 애플리케이션을 구축하는 실제 사례에서 Laravel의 EloquentORM은 데이터 조작을 단순화하는 반면 CodeIgniter는 더 많은 수동 구성이 필요합니다.

Laravel과 CodeIgniter: 대규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Laravel과 CodeIgniter: 대규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Jun 04, 2024 am 09:09 AM

대규모 프로젝트를 위한 프레임워크를 선택할 때 Laravel과 CodeIgniter는 각각 고유한 장점을 가지고 있습니다. Laravel은 엔터프라이즈급 애플리케이션을 위해 설계되었으며 모듈식 디자인, 종속성 주입 및 강력한 기능 세트를 제공합니다. CodeIgniter는 속도와 사용 편의성을 강조하여 중소 규모 프로젝트에 더 적합한 경량 프레임워크입니다. 요구 사항이 복잡하고 사용자 수가 많은 대규모 프로젝트의 경우 Laravel의 성능과 확장성이 더 적합합니다. 간단한 프로젝트나 리소스가 제한된 상황에서는 CodeIgniter의 가볍고 빠른 개발 기능이 더 이상적입니다.

Laravel과 CodeIgniter: 소규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Laravel과 CodeIgniter: 소규모 프로젝트에는 어떤 프레임워크가 더 좋나요? Jun 04, 2024 pm 05:29 PM

소규모 프로젝트의 경우 Laravel은 강력한 기능과 보안이 필요한 대규모 프로젝트에 적합합니다. CodeIgniter는 가볍고 사용하기 쉬운 매우 작은 프로젝트에 적합합니다.

See all articles