ホームページ >PHPフレームワーク >Laravel >Laravelで1対複数のテーブルをチェックする方法

Laravelで1対複数のテーブルをチェックする方法

PHPz
PHPzオリジナル
2023-05-20 18:53:07903ブラウズ

Laravel では、データの保存と管理にリレーショナル データベースを使用する必要があることが多く、1 対多の関係が最も一般的です。 1 対多の関係とは、モデルに複数の関連付けられたモデルがある関係を指します。通常、1 人のユーザーが複数の注文に対応する、または 1 つのコースが複数の学生に対応するなど、いくつかの一般的なビジネス シナリオを実装するために使用されます。

Laravel では、Eloquent ORM を使用して 1 対多のリレーションシップ クエリを実装できます。以下では、Laravel で Eloquent モデルを使用して 3 つのテーブル間の 1 対多の関係をクエリする方法を詳しく紹介します。

  1. 3 つのテーブルの設計

まず、メイン テーブル、サブテーブル、サブテーブルの外部キー関連付けテーブルという 3 つのテーブルを設計する必要があります。サンプル テーブルの設計は次のとおりです。

メイン テーブル: users

id name email
1 Tom tom@laravel.com
2 ジェリー jerry@laravel.com
3 ボブ bob@laravel.com

サブテーブル:orders

id order_no user_id
1 1001 1
2 1002 2
3 1003 3
4 1004 1

サブテーブル外部キー関連テーブル: order_items

##54grape
#id order_id product_name
1 1 apple
2 1 バナナ
3 2 ナシ
4 4 オレンジ
    Laravel モデルの作成
Laravel では、3 つのテーブルに対応する 3 つのモデルを作成する必要があります。 。モデルを作成するときは、モデル間の関係を定義する必要があります。

メインテーブルモデル: User

class User extends Model
{
    public function orders()
    {
        return $this->hasMany(Order::class);
    }
}

サブテーブルモデル: Order

class Order extends Model
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function items()
    {
        return $this->hasMany(OrderItem::class);
    }
}

サブテーブル外部キー関連テーブルモデル: OrderItem

class OrderItem extends Model
{
    public function order()
    {
        return $this->belongsTo(Order::class);
    }
}

    Query 1 対多の関係
Laravel では、Eloquent ORM を使用して 1 対多の関係クエリを実装できます。以下は、ユーザーのすべての注文とその下に配置されたすべての注文アイテムをクエリするコード例です。

$user = User::find(1);

foreach ($user->orders as $order) {
    echo $order->order_no;

    foreach ($order->items as $item) {
        echo $item->product_name;
    }
}

上記のコードは、ユーザー Tom のすべての注文とその下に配置されたすべての注文アイテムを出力します。

Eloquent に関連付けられたプリロード メソッドを直接使用して、ユーザー、その注文、およびすべての注文項目をクエリすることもできます:

$user = User::with('orders.items')->find(1);

foreach ($user->orders as $order) {
    echo $order->order_no;

    foreach ($order->items as $item) {
        echo $item->product_name;
    }
}

上記のコードは、すべての品目について、ユーザー Tom のすべての注文と注文を出力します。その場合、この方法は上記の方法よりもパフォーマンスが優れています。

    概要
Laravel では、Eloquent ORM を使用して 1 対多のリレーションシップ クエリを非常に簡単に実装できます。関係がモデル内で定義されている限り、指定したモデルに関連するすべてのデータを簡単に取得できます。同時に、関連するプリロード方法を使用してクエリのパフォーマンスを最適化し、アプリケーションをより効率的かつ安定させることもできます。

以上がLaravelで1対複数のテーブルをチェックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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