ホームページ >PHPフレームワーク >Laravel >Laravelで1対複数のテーブルをチェックする方法
Laravel では、データの保存と管理にリレーショナル データベースを使用する必要があることが多く、1 対多の関係が最も一般的です。 1 対多の関係とは、モデルに複数の関連付けられたモデルがある関係を指します。通常、1 人のユーザーが複数の注文に対応する、または 1 つのコースが複数の学生に対応するなど、いくつかの一般的なビジネス シナリオを実装するために使用されます。
Laravel では、Eloquent ORM を使用して 1 対多のリレーションシップ クエリを実装できます。以下では、Laravel で Eloquent モデルを使用して 3 つのテーブル間の 1 対多の関係をクエリする方法を詳しく紹介します。
まず、メイン テーブル、サブテーブル、サブテーブルの外部キー関連付けテーブルという 3 つのテーブルを設計する必要があります。サンプル テーブルの設計は次のとおりです。
メイン テーブル: users
id | name | |
---|---|---|
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
#id | order_id | product_name |
---|---|---|
1 | 1 | apple |
2 | 1 | バナナ |
3 | 2 | ナシ |
4 | 4 | オレンジ |
4 | grape |
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); } }
$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で1対複数のテーブルをチェックする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。