Home > Article > PHP Framework > How to check one to many tables in laravel
In Laravel, we often need to use relational databases to store and manage data, and one-to-many relationships are the most common one. A one-to-many relationship refers to a relationship in which a model has multiple associated models. It is usually used to implement some common business scenarios, such as one user corresponding to multiple orders or one course corresponding to multiple students.
In Laravel, we can use Eloquent ORM to implement one-to-many relationship query. Below I will introduce in detail how to use the Eloquent model in Laravel to query the one-to-many relationship between three tables.
First, we need to design three tables, namely the main table, the sub-table and the sub-table foreign key association table. The following is the design of the sample table:
Main table: users
id | name | |
---|---|---|
1 | Tom | tom@laravel.com |
2 | Jerry | jerry@laravel.com |
3 | Bob | bob@laravel.com |
Sub table: orders
id | order_no | user_id |
---|---|---|
1 | 1001 | 1 |
2 | 1002 | 2 |
3 | 1003 | 3 |
4 | 1004 | 1 |
Sub-table foreign key related table: order_items
id | order_id | product_name |
---|---|---|
1 | 1 | apple |
2 | 1 | banana |
3 | 2 | pear |
4 | 4 | orange |
4 | grape |
class User extends Model { public function orders() { return $this->hasMany(Order::class); } }Sub table model: Order
class Order extends Model { public function user() { return $this->belongsTo(User::class); } public function items() { return $this->hasMany(OrderItem::class); } }Sub table foreign key related table model: 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; } }The above code will output all orders of user Tom and all order items placed under them. We can also directly use Eloquent's associated preloading method to query a user, his orders and all order items:
$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; } }The above code will output all orders and orders of user Tom For all line items under it, this method has better performance than the above method.
The above is the detailed content of How to check one to many tables in laravel. For more information, please follow other related articles on the PHP Chinese website!