찾다
PHP 프레임워크LaravelLaravel 7에서 UUID를 우아하게 사용하는 방법에 대한 튜토리얼

Laravel 7에서 UUID를 우아하게 사용하는 방법에 대한 튜토리얼

최근에 Laravel 7에서 UUID(Universal Unique Identifier)를 구현해야 했고 몇 가지 문제가 발생했습니다. 이 포스팅이 같은 일을 하고 있는 다른 분들에게도 도움이 되었으면 좋겠습니다.

UUID를 사용하는 고급 이유

A) 이는 URL에서 번호가 붙은 식별자를 제거하므로 사용자는 애플리케이션에서 생성한 특정 개체 수를 볼 수 없습니다. 예:

https://myapp.com/api/users/5

대:

https://myapp.com/api/users/0892b118-856e-4a15-af0c-66a3a4a28eed

B) 식별 번호를 추측하기가 훨씬 더 어렵습니다. 이는 보안에 좋지만 이를 방지하기 위해 다른 기술을 구현해야 할 수도 있습니다.

UUID를 기본 키로 구현

데이터베이스 마이그레이션 변경 방법

먼저, 데이터베이스 마이그레이션에서 현재 자동 증가 ID 필드를 UUID로 바꾸고 싶습니다. 다음 접근 방식을 따를 수도 있습니다. 자동 증가 ID를 유지하고 사용자에게 URL이 표시될 때 사용할 테이블의 추가 필드로 UUID를 사용합니다(이 경우 ID를 모델에 숨깁니다). 여기서는 우리가 할 수 있는 일이 아닙니다. 가상의 직원 테이블이 어떻게 생겼는지 살펴보겠습니다.

public function up()
    {
        Schema::create('employees', function (Blueprint $table) {
            $table->uuid('id')->primary;
            $table->string('name');
            $table->string('email')->unique();
            $table->string('work_location')->nullable();
            $table->timestamps();
        });
    }

여기서 일반 id()를 uuid()로 바꾸고 이를 기본 키로 설정했습니다.

이것을 특성으로 만들어 보겠습니다

다음으로 이 모델의 새 인스턴스가 생성될 때 UUID가 할당되도록 Laravel 수명 주기 후크를 구현할 수 있습니다. 모델에서 직접 코드를 작성할 수 있지만 여러 모델에서 UUID를 사용하려는 경우 Traits를 사용하는 것이 좋습니다(이 Dev 기사에서 이 내용을 배웠습니다. Dev에게 정말 감사드립니다). 특성을 사용하면 기본적으로 기능을 생성하고 여러 모델에서 사용하기 위해 use 키워드를 통해 호출할 수 있습니다.

새 특성을 생성하려면 AppHttpTraits 폴더를 생성하고(이것은 단지 내 취미이므로 다른 곳에 둘 수 있습니다) 해당 특성에 대한 새 파일을 생성합니다. UsesUuid.php 파일을 호출하겠습니다.

특징의 특정 코드는 다음과 같습니다.

<?php
namespace App\Http\Traits;
use Illuminate\Support\Str;
trait UsesUuid
{
  protected static function bootUsesUuid() {
    static::creating(function ($model) {
      if (! $model->getKey()) {
        $model->{$model->getKeyName()} = (string) Str::uuid();
      }
    });
  }
  public function getIncrementing()
  {
      return false;
  }
  public function getKeyType()
  {
      return &#39;string&#39;;
  }
}

UUID를 쉽게 생성하려면 IlluminateSupportStr을 사용하세요. getIncrementing() 메소드는 모델의 기본 키가 증가하지 않을 것임을 Laravel에 알려주며(왜냐하면 false로 설정했기 때문입니다), getKeyType() 메소드는 모델의 기본 키가 문자열 유형임을 Laravel에 알려줍니다. bootUsesUuid() 메소드를 사용하면 Laravel의 강력한 수명주기 후크를 사용할 수 있습니다. 여기를 방문하시면 구양축제에 대한 자세한 내용을 보실 수 있습니다. 기본적으로 우리 코드는 이미 Laravel에게 이 모델의 새 인스턴스가 생성될 때 이에 대한 UUID 기본 키를 설정하라고 지시합니다!

이제 use 키워드를 사용하여 모델에 이 기능을 쉽게 구현할 수 있습니다.

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
...
class Employee extends Model
{
    ...
    use \App\Http\Traits\UsesUuid;
    ...
}

UUID를 외래 키로 참조

테이블의 UUID를 외래 키로 참조하려면 테이블의 외래 키 필드 유형을 변경하기만 하면 됩니다. 다음과 같습니다...

 Schema::create(&#39;another_table&#39;, function(Blueprint $table) {
        $table->id();
        $table->unsignedBigInteger(&#39;employee_id&#39;);
        $table->string(&#39;some_field&#39;);
        $table->foreign(&#39;employee_id&#39;)
            ->references(&#39;id&#39;)
            ->on(&#39;shifts&#39;)
            ->onDelete(&#39;cascade&#39;);
    });

... Employee_id 외래 키를 참조할 때 부호 없는 큰 정수 데이터 유형을 생성하고 다음과 같이 수정했습니다.

 Schema::create(&#39;another_table&#39;, function(Blueprint $table) {
        $table->id();
        $table->uuid(&#39;employee_id&#39;);
        $table->string(&#39;some_field&#39;);
        $table->foreign(&#39;employee_id&#39;)
            ->references(&#39;id&#39;)
            ->on(&#39;shifts&#39;)
            ->onDelete(&#39;cascade&#39;);
    });

그렇게 간단합니다! 한 가지 더...

UUID와 다형성 관계

자신의 작업이나 가져오는 패키지를 통해 다형성 관계에서 이 모델을 참조할 수도 있습니다. 마이그레이션에서 테이블은 다음과 같습니다.

    public function up()
    {
        Schema::create(&#39;some_package_table&#39;, function (Blueprint $table) 
        {
            $table->bigIncrements(&#39;id&#39;);
            $table->morphs(&#39;model&#39;);
            ...
        }
    }

여기에서 morphs() 메소드는 데이터베이스에 unsigned big int 유형의 model_id와 문자열 유형의 model_type이라는 두 개의 필드를 생성합니다. 문제는 우리 모델이 이제 증가하는 정수 ID 대신 UUID를 사용하고 있기 때문에 오류가 발생하고 다음과 같은 내용이 표시된다는 것입니다. :

Data truncated for column &#39;model_id&#39; at row 1

이제 새 UUID를 지원하려면 model_id 필드가 필요합니다. 유형은 다음과 같습니다. CHAR (36). 괜찮아요! Laravel을 사용하면 이 작업을 매우 쉽게 수행할 수 있으며 수동으로 수행할 필요가 없습니다. 마이그레이션을 다음으로 변경하세요:

    public function up()
    {
        Schema::create(&#39;some_package_table&#39;, function (Blueprint $table) 
        {
            $table->bigIncrements(&#39;id&#39;);
            $table->uuidMorphs(&#39;model&#39;);
            ...
        }
    }

Laravel을 사랑하는 또 다른 이유! 즐거운 코딩하세요!

추천 튜토리얼: "Laravel Tutorial"

위 내용은 Laravel 7에서 UUID를 우아하게 사용하는 방법에 대한 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 learnku에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
최신 Laravel 버전은 무엇입니까?최신 Laravel 버전은 무엇입니까?May 09, 2025 am 12:09 AM

2023 년 10 월 현재 Laravel의 최신 버전은 10.x입니다. 1.Laravel10.x는 PHP8.1을 지원하여 개발 효율을 향상시킵니다. 2. JetStream은 Livewire 및 Inertia.js에 대한 지원을 향상시키고 프론트 엔드 개발을 단순화합니다. 3. ELOQUENTORM은 데이터 처리 성능을 향상시키기 위해 전체 텍스트 검색 기능을 추가합니다. 4. 의존성 패키지 호환성을 사용할 때 의존성 패키지 호환성에주의를 기울이고 캐시 최적화 성능을 적용하십시오.

Laravel 마이그레이션 : 데이터베이스 관리에 대한 초보자 안내서Laravel 마이그레이션 : 데이터베이스 관리에 대한 초보자 안내서May 09, 2025 am 12:07 AM

laravelmigrationsStreamlinedatabasemanagementByingversioncontrolforyourdatabaseschema.1) theavallowyoutodefineandsharethestructureyourdatabase, makingiteasytomanagechangevertime

라 라벨 마이그레이션 : 베스트 코딩 가이드라 라벨 마이그레이션 : 베스트 코딩 가이드May 09, 2025 am 12:03 AM

Laravel의 마이그레이션 시스템은 개발자가 데이터베이스를 설계하고 관리 할 수있는 강력한 도구입니다. 1) 마이그레이션 파일이 명확하게 명명되었는지 확인하고 동사를 사용하여 작업을 설명하십시오. 2) 필드에 고유 한 제약 조건을 추가하는 것과 같은 데이터 무결성 및 성능을 고려하십시오. 3) 트랜잭션 처리를 사용하여 데이터베이스 일관성을 보장합니다. 4) 마이그레이션이 끝날 때 인덱스를 작성하여 성능을 최적화하십시오. 5) 마이그레이션의 원자력을 유지하고 각 파일에는 하나의 논리적 작업 만 포함됩니다. 이러한 관행을 통해 효율적이고 유지 관리 가능한 마이그레이션 코드를 작성할 수 있습니다.

최신 Laravel 버전 : 최신 기능을 사용하여 최신 상태를 유지하십시오최신 Laravel 버전 : 최신 기능을 사용하여 최신 상태를 유지하십시오May 09, 2025 am 12:03 AM

Laravel의 최신 버전은 2023 년 초에 출시 된 10.x입니다.이 버전은 향상된 Eloquentorm 기능과 단순화 된 라우팅 시스템을 제공하여 개발 효율성 및 성능을 향상시킬 수 있지만 업그레이드 중에 신중하게 테스트해야합니다.

Laravel Soft Deletes 마스터 링 : 모범 사례 및 고급 기술Laravel Soft Deletes 마스터 링 : 모범 사례 및 고급 기술May 08, 2025 am 12:25 AM

laravelsoftdeletesalke "삭제"with with withoutremovingrecordsfromthedatabase.toimplement : 1) usethesoftDeletestRaitinyOUrmodel.2) useetHestOftDeletEstraItinyOUrmodel.2) usewitHtrashed () toIncludEsOft-deletEdRecordsInqueries.3) CreateCustomScopes-dikeTrashed () forstreamledcode

Laravel Soft Deletes : 레코드 복원 및 영구 삭제Laravel Soft Deletes : 레코드 복원 및 영구 삭제May 08, 2025 am 12:24 AM

Laravel에서는 Restore () 메소드를 사용하여 소프트 삭제 된 레코드를 복원하고 forcedelete () 메소드를 영구적으로 삭제하십시오. 1) withTrashed ()-> find ()-> restore ()를 사용하여 단일 레코드를 복원하고 단일 레코드를 사용하여 단일 레코드를 복원합니다. 2) withtrashed ()-> find ()-> outcedelete ()를 사용하여 단일 레코드를 영구적으로 삭제하고 여러 레코드는 OnlyTrashed ()-> outcedelete ()를 사용합니다.

현재 Laravel 릴리스 : 오늘 다운로드 및 업그레이드!현재 Laravel 릴리스 : 오늘 다운로드 및 업그레이드!May 08, 2025 am 12:22 AM

향상된 eloquentorm 기능과 새로운 라우팅 기능을 제공하여 응용 프로그램 효율성 및 보안을 향상시킬 수 있으므로 최신 Laravel 버전으로 다운로드하여 업그레이드해야합니다. 업그레이드하려면 다음 단계를 따르십시오. 1. 현재 응용 프로그램을 백업하고 2. Composer.json 파일을 최신 버전으로 업데이트하십시오. 3. 업데이트 명령을 실행하십시오. 폐기 된 기능 및 패키지 호환성과 같은 몇 가지 일반적인 문제가 발생할 수 있지만 이러한 문제는 참조 문서 및 커뮤니티 지원을 통해 해결할 수 있습니다.

LARAVEL : 언제 마지막 버전으로 업데이트해야합니까?LARAVEL : 언제 마지막 버전으로 업데이트해야합니까?May 08, 2025 am 12:18 AM

youshouldupdatothelatestlaravelversionwhendebenefits.1) NewFeaturesandImprovementScanenHanceYourApplication.2) SecurityUpDatesAreCrucialIfVulnerAbilitiessressed.3) PerformanceGainsMayJustifyAnupDateifyourappstruggles.4) ENS

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 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

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

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

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

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

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