Laravel 7 で UUID を適切に使用するためのチュートリアル
最近、Laravel 7 で Universal Unique Identifier (UUID) を実装する必要があり、いくつかの問題に遭遇しました。この投稿が同じことをしている他の人に役立つことを願っています。
UUID を使用する高度な理由
A) UUID では、Uniform Resource Locator から番号付きの識別子が削除されるため、ユーザーは特定のオブジェクトの数を確認できません。アプリが作成しました。例:
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(); に置き換え、それを主キーにしていることに注目してください。
これを特性にしましょう
次に、Laravel ライフサイクル フックを実装して、このモデルの新しいインスタンスが作成されるときに UUID が割り当てられるようにします。モデルにコードを直接記述することもできますが、複数のモデルで UUID を使用する場合は、Traits を使用することをお勧めします (これについては、この開発記事で学びました。開発者に感謝します)。特性を使用すると、基本的に機能を作成し、それを use キーワード経由で呼び出して複数のモデルで使用できるようになります。
新しい Trait を作成するには、 \App\Http\Traits\ フォルダー (これは私の趣味です。他の場所に置いても構いません) を作成し、 Trait 用の新しいファイルを作成します。ファイルを 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 'string'; } }
\Illuminate\Support\Str を使用して UUID を簡単に生成します。 getIncrementing () メソッドは、モデルの主キーがインクリメントされないこと ( false に設定しているため) を Laravel に伝え、 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('another_table', function(Blueprint $table) { $table->id(); $table->unsignedBigInteger('employee_id'); $table->string('some_field'); $table->foreign('employee_id') ->references('id') ->on('shifts') ->onDelete('cascade'); });
... 外部キーemployee_idを参照するときに符号なしの大きな整数データ型を作成し、それを次のように変更しました。
Schema::create('another_table', function(Blueprint $table) { $table->id(); $table->uuid('employee_id'); $table->string('some_field'); $table->foreign('employee_id') ->references('id') ->on('shifts') ->onDelete('cascade'); });
これは非常に簡単です。もう 1 つ...
UUID とポリモーフィックな関係
独自の操作またはインポートしているパッケージを通じて、ポリモーフィックな関係で参照していることに気づくかもしれません。モデル。移行では、テーブルは次のようになります。
public function up() { Schema::create('some_package_table', function (Blueprint $table) { $table->bigIncrements('id'); $table->morphs('model'); ... } }
ここで、morphs () メソッドは、データベースに 2 つのフィールド、符号なし整数型の model_id と文字列型の model_type を作成します。問題は、モデルが増分する整数 ID の代わりに UUID を使用していることです。そのため、次のようなエラーが表示されます。 :
Data truncated for column 'model_id' at row 1
新しい UUID をサポートするには、model_id フィールドが必要です。型はCHAR(36)です。心配しないで! Laravel を使用するとこれが非常に簡単になり、手動で行う必要がありません。移行を次のように変更するだけです:
public function up() { Schema::create('some_package_table', function (Blueprint $table) { $table->bigIncrements('id'); $table->uuidMorphs('model'); ... } }
Laravel を愛するもう 1 つの理由!コーディングを楽しんでください!
推奨チュートリアル: 「Laravel チュートリアル 」
以上がLaravel 7 で UUID を適切に使用するためのチュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
