Laravelでforeachテーブルのルックアップを回避する方法

PHPz
リリース: 2023-04-21 10:31:02
オリジナル
658 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート