ホームページ  >  記事  >  バックエンド開発  >  Laravel Eloquent では `$model->relation()` と `$model->relation()` をいつ使用する必要がありますか?

Laravel Eloquent では `$model->relation()` と `$model->relation()` をいつ使用する必要がありますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 08:24:30349ブラウズ

Laravel Eloquent の

When should I use  `$model->relation()` と `$model->relation()` の比較? 
relation()` vs. Laravel Eloquent の `$model->relation()`? " />

Eloquent のメソッド呼び出し $model->relation(); と $model->relation の違い

Laravel の Eloquent ORM における $model->relation(); の違いを理解する;relation(); と $model->relation が重要です。

$model->relation()

$model->relation() を呼び出すと、定義された関係関数が直接呼び出されます。モデル内では、この関数は通常次のようになります。

<code class="php">public function distributors()
{
    return $this->hasMany('Distributor');
}</code>

$store->distributors() を呼び出すと、$this->hasMany('Distributor') の戻り値が得られます。 IlluminateDatabaseEloquentRelationsHasMany のインスタンス

$model->relation(): を使用する場合、このメソッドは、リレーションシップ クエリを実行する前にさらに調整する必要がある場合に役立ちます。たとえば、

<code class="php">$distributors = $store->distributors()->where('priority', '>', 4)->get();</code>
$store->distributors()->get() を使用することはより簡単な代替方法ですが、同じ結果が得られます。

$model->relation

Laravel は、リレーションシップの結果にプロパティとして直接アクセスできるようにする裏技を採用しています。$model->relation を呼び出しても、実際には既存のプロパティにはアクセスしません。代わりに、Laravel はこの呼び出しをインターセプトして __get() にルーティングします。

このメソッドは最終的にプロパティ名 ('distributors') で getAttribute() を呼び出し、関係がキャッシュされているかどうか ('relations') を確認します。配列)。存在せず、リレーションシップ メソッドが存在する場合は、それをロードしようとします (getRelationshipFromMethod)。最後に、モデルはクエリを実行する getResults() を通じてリレーションシップから結果を取得します。

本質的に、$model->relation は $model->relation()->get と同等です。 () は関係の結果を直接返します。

結論

    $model->relation() は関係オブジェクト自体を返し、クエリをさらにカスタマイズできます。
  • $model->relation はクエリ結果を直接取得し、便利なショートカットを提供します。
この違いを理解することは、Eloquent を効果的に使用するために不可欠です。

以上がLaravel Eloquent では `$model->relation()` と `$model->relation()` をいつ使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。