国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
モデルを生成し、移行
多型の関係を使用する必要がある狀況に遭遇したことがない場(chǎng)合でも、その日は最終的に來(lái)るかもしれません。 Laravelを使用することの利點(diǎn)は、この狀況を処理するのは非常に簡(jiǎn)単であり、モデル関連のトリックを?qū)g行して物事を機(jī)能させる必要はないことです。 Laravelは、多目的な多型の関係をサポートしています。詳細(xì)については、こちらをご覧ください。
Laravelで多型の関係を設(shè)定する方法は?
多対多數(shù)の関係を持つ多型関係を使用できますか?
データベースの移行では、通常、ポリ型の関係を受け取る2つの列をテーブルに追加します。1つは関連モデルID用、もう1つは関連モデルタイプです。 Laravelは、これらの列を追加するための便利な
列がテーブルに追加されます。
ホームページ バックエンド開(kāi)発 PHPチュートリアル 雄弁さの多型関係を再導(dǎo)入します

雄弁さの多型関係を再導(dǎo)入します

Feb 09, 2025 pm 12:17 PM

Re-Introducing Eloquent's Polymorphic Relationships

コアポイント

  • Laravelの多型協(xié)會(huì)により、モデルは1つの関連付けの他の複數(shù)のモデルに屬することができます。これにより、データベース構(gòu)造が簡(jiǎn)素化され、コードの維持が容易になり、より動(dòng)的で柔軟なデータ関係が可能になります。
  • Laravelでの多型関連のセットアップには、雄弁さモデルの関連付けを定義することが含まれます。
  • メソッドは、多型関連モデルを受信するために使用され、morphToまたはmorphManyメソッドは他のモデルに関連付けられたモデルに使用されます。 morphOne
  • Laravelの
  • メソッドを使用して、各モデルのクラス名の代わりにカスタム名を使用するように雄弁に指示することができます。これは、モデルの名前空間の変更または長(zhǎng)すぎる名前空間の場(chǎng)合に役立ちます。 MorphMap
  • Laravelは、多目的な多型の関係をサポートしており、モデルが多目的に複數(shù)のモデルに屬することを可能にします。これは、複雑なアプリケーションで特に役立ちます。

この記事は、Younes Rafieによって査読されました。 SetePointのコンテンツを完璧にするために、SetePointのすべてのピアレビューアに感謝します!


Laravelで共通するなど、モデルまたはデータベーステーブルの間に異なるタイプの関係を使用している可能性があります。しかし、もう1つの一般的でないタイプがあります:多型関連。では、多型協(xié)會(huì)とは何ですか? Re-Introducing Eloquent's Polymorphic Relationships

多型協(xié)會(huì)とは、1つの関連付けの複數(shù)の他のモデルに屬するモデルを指します。

これを説明するために、トピックと投稿モデルがある架空のシーンを作成しましょう。ユーザーはトピックや投稿にコメントを殘すことができます。多型関係を使用して、両方のケースに単一のコメントテーブルを使用できます。驚くべきことに、そうですか?理想的には、post_commentsテーブルとTopic_commentsテーブルを作成してコメントを區(qū)別する必要があるため、これは少し非現(xiàn)実的です。多型関係を使用して、2つのテーブルは必要ありません。実用的な例を介して多型の関係を理解し??ましょう。

何を構(gòu)築するか

曲とアルバムを含むデモミュージックアプリを作成します。このアプリでは、曲やアルバムが好きです。多型関係を使用して、両方のケースに単一のUPVotesテーブルを使用します。まず、この関係を構(gòu)築するために必要なテーブル構(gòu)造を調(diào)べましょう。

および

列について説明しましょう。

列にはアルバムまたは曲のID値が含まれ、
<code>albums
    id - integer
    name - string

songs
    id - integer
    title - string
    album_id - integer

upvotes
    id - integer
    upvoteable_id - integer
    upvoteable_type - string
</code>
列にはモデルを所有するクラス名が含まれます。

列は、ORMがupvoteable_id関係にアクセスするときにモデルを所有するために戻る「タイプ」を決定する方法です。 upvoteable_type

モデルを生成し、移行

私はあなたがすでにランニングアプリケーションを持っていると仮定します。そうでない場(chǎng)合、この高度なクイックスタートコースが役立つ場(chǎng)合があります。最初に3つのモデルと移行を作成し、次に私たちのニーズに合わせて移行を編集しましょう。

<code>albums
    id - integer
    name - string

songs
    id - integer
    title - string
    album_id - integer

upvotes
    id - integer
    upvoteable_id - integer
    upvoteable_type - string
</code>

モデルを作成するときに-mフラグを渡すと、これらのモデルに関連する移行が生成されることに注意してください。これらの移行のupメソッドを調(diào)整して、目的のテーブル構(gòu)造を取得しましょう。

{some_timestamp}_create_albums_table.php

<code>php artisan make:model Album -m
php artisan make:model Song -m
php artisan make:model Upvote -m
</code>

{some_timestamp}_create_songs_table.php

public function up()
{
    Schema::create('albums', function (Blueprint $table) {
       $table->increments('id');
        $table->string('name');
        $table->timestamps();
    });
}

{some_timestamp}_create_upvotes_table.php

public function up()
{
    Schema::create('songs', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->integer('album_id')->unsigned()->index();
        $table->timestamps();

        $table->foreign('album_id')->references('id')->on('albums')->onDelete('cascade');
    });
}
ここで、職人移行コマンドを?qū)g行してこれらの3つのテーブルを作成できます。

アルバム、歌、いいねの間の多型の関係に注意を払うようにモデルを構(gòu)成しましょう:
public function up()
{
    Schema::create('upvotes', function (Blueprint $table) {
        $table->increments('id');
        $table->morphs('upvoteable'); // 添加無(wú)符號(hào)整數(shù) upvoteable_id 和字符串 upvoteable_type
        $table->timestamps();
    });
}

app/Upvote.php

<code>php artisan migrate</code>

app/Album.php

[...]
class Upvote extends Model
{
    /**
     * 獲取所有擁有模型。
     */
    public function upvoteable()
    {
        return $this->morphTo();
    }
}

app/Song.php アルバムと曲のモデルの

メソッドは、これらのモデルとupvoteモデルの間の多型の1対多くの関係を定義し、その特定のモデルのインスタンスのようなすべてを手に入れるのに役立ちます。
class Album extends Model
{
    protected $fillable = ['name'];

    public function songs()
    {
        return $this->hasMany(Song::class);
    }

    public function upvotes()
    {
        return $this->morphMany(Upvote::class, 'upvoteable');
    }
}

関係を定義した後、多型の関係がどのように機(jī)能するかをよりよく理解するためにアプリケーションを試してみることができます。このアプリのビューは作成されません。コンソールからアプリのみを試してみます。 upvotes

コントローラーと同様の方法を配置する場(chǎng)所を検討する場(chǎng)合は、AblumupVoteControllerとSongUpVoteControllerを作成することをお?jiǎng)幛幛筏蓼埂¥长韦瑜Δ摔筏?、多型の関係に対処するとき、私たちは動(dòng)作しているオブジェクトに厳密に接続することができます。私たちの場(chǎng)合、アルバムと曲が好きです。好きなものはアルバムや曲ではありません。また、それは一般的なものではありません。これは、ほとんどの1対多くの関係でupvotescontrollerを持っている方法の反対です。これが理にかなっていることを願(yuàn)っています。

コンソールを始めましょう:

検索関係

class Song extends Model
{
    protected $fillable = ['title', 'album_id'];

    public function album()
    {
        return $this->belongsTo(Album::class);
    }

    public function upvotes()
    {
        return $this->morphMany(Upvote::class, 'upvoteable');
    }
}
データが準(zhǔn)備が整ったので、モデルを介して関係にアクセスできます。これは、UPVotesテーブルのデータのスクリーンショットです:

アルバムのようなすべてにアクセスするには、Re-Introducing Eloquent's Polymorphic Relationships dynamic屬性を使用できます:

また、upvotesへの呼び出しを?qū)g行する方法の名前にアクセスすることにより、多型モデルから多型関係の所有者を取得することもできます。私たちの場(chǎng)合、それはupvoteモデルの

メソッドです。したがって、動(dòng)的プロパティとしてメソッドにアクセスします。
<code>php artisan tinker
>>> $album = App\Album::create(['name' => 'More Life']);
>>> $song = App\Song::create(['title' => 'Free smoke', 'album_id' => 1]);
>>> $upvote1 = new App\Upvote;
>>> $upvote2 = new App\Upvote;
>>> $upvote3 = new App\Upvote;
>>> $album->upvotes()->save($upvote1);
>>> $song->upvotes()->save($upvote2);
>>> $album->upvotes()->save($upvote3);</code>

upvoteモデルのmorphTo関係は、アルバムインスタンスのインスタンスが所有しているため、アルバムインスタンスを返します。 upvoteable

曲やアルバムの數(shù)字の數(shù)を得ることができるので、ビューの好きなものに基づいて曲やアルバムを並べ替えることができます。それが音楽チャートの仕組みです。

曲については、このような好きなものを手に入れます:

<code>albums
    id - integer
    name - string

songs
    id - integer
    title - string
    album_id - integer

upvotes
    id - integer
    upvoteable_id - integer
    upvoteable_type - string
</code>
カスタム多型タイプ

デフォルトでは、Laravelは完全に適格なクラス名を使用して、関連するモデルの種類(lèi)を保存します。たとえば、上記の例では、upv??oteはアルバムまたは曲に屬し、デフォルト

はそれぞれupvoteable_typeまたはApp\Albumに屬している可能性があります。 App\Song

しかし、これには大きな欠點(diǎn)があります。アルバムモデルの名前空間が変更された場(chǎng)合はどうなりますか? UPVotesテーブルのすべての出來(lái)事を変更するには、何らかの移行を行う必要があります。これは少し難しいです!名前空間が長(zhǎng)い場(chǎng)合(例えば

)。これは、列に非常に長(zhǎng)い最大長(zhǎng)を設(shè)定する必要があることを意味します。これは、App\Models\Data\Topics\Something\SomethingElseメソッドが役立つ場(chǎng)所です。 MorphMap

「Morphmap」メソッドは、クラス名ではなく、各モデルのカスタム名を使用するように雄弁に指示します。

AppServiceProviderのブート関數(shù)にMORPHMAPを登録するか、別のサービスプロバイダーを作成できます。新しい変更が有効になるためには、Composer Dump-Autoloadコマンドを?qū)g行する必要があります。だから今、私たちはこのようなレコードを追加することができます:
<code>php artisan make:model Album -m
php artisan make:model Song -m
php artisan make:model Upvote -m
</code>

前の例とまったく同じ動(dòng)作します。
public function up()
{
    Schema::create('albums', function (Blueprint $table) {
       $table->increments('id');
        $table->string('name');
        $table->timestamps();
    });
}

結(jié)論

多型の関係を使用する必要がある狀況に遭遇したことがない場(chǎng)合でも、その日は最終的に來(lái)るかもしれません。 Laravelを使用することの利點(diǎn)は、この狀況を処理するのは非常に簡(jiǎn)単であり、モデル関連のトリックを?qū)g行して物事を機(jī)能させる必要はないことです。 Laravelは、多目的な多型の関係をサポートしています。詳細(xì)については、こちらをご覧ください。

あなたが今、あなたが多型の関係と、これらのタイプの関係に何が必要かを理解していることを願(yuàn)っています。多型の関係のもう少しのより高度な例はこちらです。これが役立つと思う場(chǎng)合は、友達(dá)と共有して、[いいね]ボタンをクリックすることを忘れないでください。以下のコメントセクションにご意見(jiàn)をお聞かせください!

Eloquentの多型関係についてのFAQ

Laravelで多型関係を使用することの利點(diǎn)は何ですか?

Laravelの多型関係は、異なるモデル間で関連データを処理するための柔軟で効率的な方法を提供します。モデルが1つの関連付けで複數(shù)の他のタイプのモデルに屬することを可能にします。これは、タイプに関係なく、関連するすべてのデータの単一の一意の識(shí)別子リストを持つことができることを意味します。これにより、データベース構(gòu)造が大幅に簡(jiǎn)素化され、コードの維持が容易になります。また、複雑なアプリケーションで特に役立つ、より動(dòng)的で柔軟なデータ関係が可能になります。

Laravelで多型の関係を設(shè)定する方法は?

Laravelでの多型関係のセットアップには、雄弁さモデルの関係を定義することが含まれます。まず、多型の関係を受け取るモデルの関係を定義する必要があります。これは、

メソッドを使用して行われます。次に、他のモデルに関連付けられるモデルでは、関係が1対1であるか1対1かどうかに応じてmorphToまたはmorphManyメソッドを使用します。 morphOne

Laravelで多型の関係の例を提供できますか?

もちろん、投稿とユーザーの両方がコメントを持つことができるブログプラットフォームを考えてみましょう。この場(chǎng)合、コメントモデルは、投稿およびユーザーモデルと多型の関係を持ちます。この関係を定義する方法は次のとおりです

関連レコードを取得するために多型関係を使用する方法は?

<code>albums
    id - integer
    name - string

songs
    id - integer
    title - string
    album_id - integer

upvotes
    id - integer
    upvoteable_id - integer
    upvoteable_type - string
</code>
他の雄弁な関係と同様に、多型の関係で関連する記録を取得できます。たとえば、投稿からすべてのコメントを取得する場(chǎng)合は、これを行うことができます。

多型関係を使用して関連レコードを保存する方法は?

他の雄弁な関係と同様の多型関係に関連するレコードを保存します。モデルを使用してモデルを関連付けて、モデルを保存できます。例は次のとおりです。
<code>php artisan make:model Album -m
php artisan make:model Song -m
php artisan make:model Upvote -m
</code>

多型関係の一般的なユースケースは何ですか?

associate多型関係は、モデルが他の複數(shù)のタイプのモデルに屬する可能性がある狀況で特に役立ちます。いくつかの一般的なユースケースには、投稿やユーザーに屬するコメント、複數(shù)のタイプのコンテンツに適用できるタグ、さまざまなタイプのエンティティに添付できる畫(huà)像またはファイルが含まれます。

public function up()
{
    Schema::create('albums', function (Blueprint $table) {
       $table->increments('id');
        $table->string('name');
        $table->timestamps();
    });
}
多型関係を使用することの制限または短所は何ですか?

多型の関係は多くの柔軟性を提供しますが、標(biāo)準(zhǔn)的な雄弁な関係よりもセットアップと管理がより複雑で難しい場(chǎng)合があります。また、制約を読みたいという欲求など、標(biāo)準(zhǔn)的な関係のすべての機(jī)能もサポートしています。

多型関係で関連するレコードを削除する方法は?

関係の

メソッドを使用して、ポリ型関係で関連するレコードを削除できます。たとえば、投稿からすべてのコメントを削除するには、これを行うことができます。

多対多數(shù)の関係を持つ多型関係を使用できますか?

はい、Laravelはおよびメソッドを通じて、多目的な多型の関係をサポートしています。これにより、モデルは多目的に複數(shù)のモデルに屬することができます。 delete

データベース移行における多型関係にどのように対処するか?
public function up()
{
    Schema::create('songs', function (Blueprint $table) {
        $table->increments('id');
        $table->string('title');
        $table->integer('album_id')->unsigned()->index();
        $table->timestamps();

        $table->foreign('album_id')->references('id')->on('albums')->onDelete('cascade');
    });
}

データベースの移行では、通常、ポリ型の関係を受け取る2つの列をテーブルに追加します。1つは関連モデルID用、もう1つは関連モデルタイプです。 Laravelは、これらの列を追加するための便利な

メソッドを提供します:

morphToMany morphedByManyこれにより、

および

列がテーブルに追加されます。

以上が雄弁さの多型関係を再導(dǎo)入しますの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類(lèi)リムーバー

Video Face Swap

Video Face Swap

完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版

SublimeText3 中國(guó)語(yǔ)版

中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? PHPに認(rèn)証と承認(rèn)を?qū)g裝するにはどうすればよいですか? Jun 20, 2025 am 01:03 AM

tosecurelyhandLeauthenticationAndauthorizationInizationInization、followTheSteps:1.LwayShashPasswordswithPassword_hash()andverifyusingpassword_verify()、usepreparedStatementStatementStatementStatementStatementStain、andstoreUserdatain $ _SessionAfterlogin.2.implementRementRementRementRementRementRementRementRole

PHPでファイルアップロードを安全に処理するにはどうすればよいですか? PHPでファイルアップロードを安全に処理するにはどうすればよいですか? Jun 19, 2025 am 01:05 AM

PHPでファイルアップロードを安全に処理するために、コアはファイルタイプを確認(rèn)し、ファイルの名前を変更し、権限を制限することです。 1。Finfo_File()を使用して実際のMIMEタイプを確認(rèn)し、Image/JPEGなどの特定のタイプのみが許可されます。 2。uniqid()を使用してランダムファイル名を生成し、非webルートディレクトリに保存します。 3. PHP.iniおよびHTMLフォームを介してファイルサイズを制限し、ディレクトリ権限を0755に設(shè)定します。 4. Clamavを使用してマルウェアをスキャンしてセキュリティを強(qiáng)化します。これらの手順は、セキュリティの脆弱性を効果的に防止し、ファイルのアップロードプロセスが安全で信頼性が高いことを確認(rèn)します。

PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? Jun 19, 2025 am 01:07 AM

PHPでは、==と==の主な違いは、タイプチェックの厳格さです。 ==タイプ変換は比較の前に実行されます。たとえば、5 == "5"はtrueを返します。===リクエストは、trueが返される前に値とタイプが同じであることを要求します。たとえば、5 === "5"はfalseを返します。使用シナリオでは、===はより安全で、最初に使用する必要があります。==は、タイプ変換が必要な場(chǎng)合にのみ使用されます。

PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? PHP(、 - 、 *、 /、%)で算術(shù)操作を?qū)g行するにはどうすればよいですか? Jun 19, 2025 pm 05:13 PM

PHPで基本的な數(shù)學(xué)操作を使用する方法は次のとおりです。1。追加標(biāo)識(shí)は、整數(shù)と浮動(dòng)小數(shù)點(diǎn)數(shù)をサポートし、変數(shù)にも使用できます。文字列番號(hào)は自動(dòng)的に変換されますが、依存関係には推奨されません。 2。減算標(biāo)識(shí)の使用 - 標(biāo)識(shí)、変數(shù)は同じであり、タイプ変換も適用されます。 3.乗算サインは、數(shù)字や類(lèi)似の文字列に適した標(biāo)識(shí)を使用します。 4.分割はゼロで割らないようにする必要がある分割 /標(biāo)識(shí)を使用し、結(jié)果は浮動(dòng)小數(shù)點(diǎn)數(shù)である可能性があることに注意してください。 5.モジュラス標(biāo)識(shí)を採(cǎi)取することは、奇妙な數(shù)と偶數(shù)を判斷するために使用でき、負(fù)の數(shù)を処理する場(chǎng)合、殘りの兆候は配當(dāng)と一致しています。これらの演算子を正しく使用するための鍵は、データ型が明確であり、境界の狀況がうまく処理されるようにすることです。

PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話(huà)できますか? PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話(huà)できますか? Jun 19, 2025 am 01:07 AM

はい、PHPは、特定の拡張機(jī)能またはライブラリを使用して、MongoDBやRedisなどのNOSQLデータベースと対話(huà)できます。まず、MongoDBPHPドライバー(PECLまたはComposerを介してインストール)を使用して、クライアントインスタンスを作成し、データベースとコレクションを操作し、挿入、クエリ、集約、その他の操作をサポートします。第二に、PredisライブラリまたはPhpredis拡張機(jī)能を使用してRedisに接続し、キー価値設(shè)定と取得を?qū)g行し、高性能シナリオにPhpredisを推奨しますが、Predisは迅速な展開(kāi)に便利です。どちらも生産環(huán)境に適しており、十分に文書(shū)化されています。

最新のPHP開(kāi)発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? 最新のPHP開(kāi)発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? Jun 23, 2025 am 12:56 AM

postaycurrentwithpdevellyments andbest practices、follow keynewsourceslikephp.netandphpweekly、egagewithcommunitiessonforums andconferences、keeptooling and gradivallyadoptnewfeatures、andreadorcontributeTopensourceprijeprijeprijeptrijeprijeprests.

PHPとは何ですか、そしてなぜそれがWeb開(kāi)発に使用されるのですか? PHPとは何ですか、そしてなぜそれがWeb開(kāi)発に使用されるのですか? Jun 23, 2025 am 12:55 AM

PhpBecamepopularforwebdevelopmentduetoitseaseaseaseaseasease、SeamlessintegrationWithhtml、widespreadhostingsupport、andalargeecosystemincludingframeworkelavelandcmsplatformslikewordspresspressinsinsionsisionsisionsisionsisionsionsionsisionsionsionsisionsisions

PHPタイムゾーンを設(shè)定する方法は? PHPタイムゾーンを設(shè)定する方法は? Jun 25, 2025 am 01:00 AM

tosettherighttimezoneInphp、usedate_default_timezone_set()functionthestthestofyourscriptwithavalididentifiersiersuchas'america/new_york'.1.usedate_default_timezone_set()beforeanydate/timefunctions.2.2.Altertentally、confuturethephp.inifilebyset.

See all articles