Laravel でリレーションシップ マッピングを使用すると、テーブルの検索に foreach を使用するという問題を回避できます。リレーショナル マッピングは、Laravel の強力な ORM (オブジェクト リレーショナル マッピング) 機能の 1 つで、モデル内のテーブル間の関係を自動的に確立できます。
Laravel には、1 対 1、1 対多、多対多の 3 種類の関係マッピングがあります。これらの関係マッピングは、Eloquent モデルを通じて定義および確立できます。以下では、これら 3 つの関係マッピングの使用法と実装について、実践に基づいて詳しく紹介します。
1 対 1 のリレーションシップ マッピング
1 対 1 のリレーションシップ マッピングは、2 つのテーブルが同じ主キーを共有する場合によく使用されます。1 つのテーブル内の 1 つのデータ行は、他のテーブル: データの行。たとえば、Orders テーブルと Customers テーブルです。各注文は 1 人の顧客にのみ属し、各顧客の注文は 1 つだけです。この場合、orders テーブルの顧客 ID 列が customer テーブルの主キー列になります。
Eloquent では、注文モデルと顧客モデルという 2 つのモデルを定義し、2 つのモデル間の 1 対 1 の関係マッピングを確立できます。
// 订单模型 class Order extends Model { public function customer() { return $this->hasOne(Customer::class); } } // 客户模型 class Customer extends Model { public function order() { return $this->belongsTo(Order::class); } }
上記のコードでは、 Order モデルと Customer モデル (それぞれ顧客と注文) にリレーションシップ メソッドを定義しました。どちらのリレーションシップ メソッドも、Eloquent モデルの hasOne メソッドとbelongsTo メソッドを使用して、2 つのモデル間の 1 対 1 のリレーションシップ マッピングを確立します。
注文の顧客情報を検索する必要がある場合、$order->customer メソッドを使用するだけです:
$order = Order::find($id); $customer = $order->customer;
1 対多のリレーションシップ マッピング
1 対多のリレーションシップ マッピングは、テーブル内の 1 行のデータが複数のテーブル内のデータ行に対応できる場合によく使用されます。たとえば、ユーザーに複数の記事がある場合や、部門に複数の従業員がいる場合などです。この場合、関連する Eloquent モデルで hasMany メソッドとbelongsTo メソッドを使用して、1 対多の関係マッピングを確立する必要があります。
ユーザー テーブルと記事テーブルを例にとると、ユーザー モデルと記事モデルで 1 対多の関係マッピングを確立する必要があります。
// 用户模型 class User extends Model { public function articles() { return $this->hasMany(Article::class); } } // 文章模型 class Article extends Model { public function user() { return $this->belongsTo(User::class); } }
上記のコードでは、次のように定義します。 User モデルでは、articles という名前のリレーションシップ メソッドが、hasMany メソッドを通じてユーザーと記事の間の 1 対多のリレーションシップ マッピングを実装します。 user という名前のリレーションシップ メソッドが Article モデルで定義され、記事とユーザーの間の多対 1 のリレーションシップ マッピングがbelongsTo メソッドを通じて実装されます。
ユーザーのすべての記事を検索する必要がある場合、$user->articles メソッドを使用して実装するだけです:
$user = User::find($id); $articles = $user->articles;
多対多のリレーションシップ マッピング
多ペア マルチリレーションシップ マッピングは、2 つのテーブル間に多対多のリレーションシップがある場合によく使用されます。たとえば、ユーザーとロールの関係については、1 人のユーザーが複数のロールを持つことができ、1 つのロールを複数のユーザーが所有することもできます。この場合、Eloquent モデルのbelongsToMany メソッドを使用して、多対多の関係マッピングを確立する必要があります。
ユーザー テーブルとロール テーブルを例として、ユーザー モデルとロール モデルで多対多の関係マッピングを確立する必要があります。
// 用户模型 class User extends Model { public function roles() { return $this->belongsToMany(Role::class); } } // 角色模型 class Role extends Model { public function users() { return $this->belongsToMany(User::class); } }
上記のコードでは、次のように定義します。 User モデルでは、roles という名前のリレーションシップ メソッドが、belongsToMany メソッドを通じて、ユーザーとロール間の多対多のリレーションシップ マッピングを実装します。 users という名前のリレーションシップ メソッドがロール モデルで定義され、ロールとユーザー間の多対多のリレーションシップ マッピングがbelongsToMany メソッドを通じて実装されます。
ユーザーのすべてのロールを検索する必要がある場合、$user->roles メソッドを使用して実装するだけです:
$user = User::find($id); $roles = $user->roles;
要約
リレーショナルの使用Laravel 機能のマッピングにより、foreach を使用してテーブルを検索する問題を効果的に回避できます。 1 対 1、1 対多、および多対多の関係マッピングは、それぞれ異なるデータ テーブル間の関係に対応し、Eloquent モデル メソッドを通じて定義および実装されます。 hasMany、belongsTo、belongsToMany メソッドを使用して、関連する Eloquent モデルで関係メソッドを定義することにより、関係マッピングを確立できます。この方法により、複雑なデータベース操作を簡単かつ便利に実装できるようになり、コードがより明確になり、保守が容易になります。
以上がLaravelでforeachテーブルのルックアップを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。