Laravel

[Laravel] How to Retrieve Data with Matching IDs from Two Tables (Eloquent Relationship)

This article explains how to retrieve data with matching IDs from two tables using Laravel and display them on a listing page.
This method is useful when linking data across different tables using database table joins.
We will implement a one-to-many data retrieval using Eloquent ORM relationships.
The explanation includes code examples and is beginner-friendly.

Table Structures for Retrieving Data with Matching IDs

In this example, we prepare two tables: the listpages table that stores product information and the users table that stores user information.
On the product list page, not only the product name but also the name of the user who registered the product will be displayed.
Here are the two tables. From the listpages table, we want to display the “product name” on the list page and also display the “user name” who registered the product.

Structure of the users Table

The users table, which stores user information, includes the following fields:

Name Description
id Primary Key
name User Name
email Email Address

Structure of the listpages Table

Next, let’s check the structure of the listpages table, which stores product information.
This table includes the product name and the ID of the user who registered the product.

Name Description
id Primary Key
product_name Product Name
user_id Product Registration User ID = users table’s id
* You must name this field “user_id”, combining the singular form “user” from the users table name and the primary key “id” with an underscore “_”.
This allows data with matching IDs to be retrieved from the users table.

This user_id is linked to the primary key id in the users table.
By naming it user_id, a relationship with the users table is automatically established.
Laravel Eloquent uses naming conventions combining the singular form of the table name and the primary key with an underscore to create relationships.

Setting Up the Relationship to Retrieve Matching ID Data from Two Tables – Model Description

Here’s how to retrieve data in the controller.
We will get the id and name from the users table that match the user_id in the listpages table.
This allows user information to be retrieved along with the product list.
In the Listpage model (fetching listpages table data), add a method to reference the User model (fetching users table data).

class Listpage extends Model
{
	public function user()
	{
		// Retrieve data from the User model
	    return $this->belongsTo('App\User');
	}
}

This relationship method enables the Listpage model to retrieve the corresponding user record.
The belongsTo method in Eloquent creates a relationship with the users table.

Retrieving Matching ID Data from Two Tables – Controller Description

This section explains how to retrieve data in the controller.
We will retrieve the id and name from the users table that match the user_id in the listpages table.
This allows user information to be displayed along with the list.

Using with('user:id,name'), you can specify the columns to retrieve from the users table.
The equivalent SQL statement would be:
select tbl1.id, tbl1.product_name, tbl1.user_id, tbl2.id, tbl2.name from listpages tbl1, users tbl2 where tbl1.user_id = tbl2.id

use App\User;   // Use the User model
use App\Listpage;   // Use the Listpage model

    public function listdata(Request $request)
    {
        $sort = $request->sort;
        $order = $request->order;

	// Retrieve id and name from users table that match listpages table's user_id
	$listpages = Listpage::with('user:id,name')->orderBy('id', 'asc')->paginate(20);

        return view('listpages', [
            'listpages' => $listpages,
        ]);
    }

In the above code, the with method is used to retrieve only the id and name columns from the related users table.
This enables efficient data retrieval while using relationships.

Displaying Matching ID Data from Two Tables – View (Listing Page) Description

This section explains how to display the product name from the listpages table and the corresponding user name from the users table.
Thanks to the relationship setup, the user name can be easily displayed.

To display the product name from the listpages table: {{ $listpage->product_name }}
To display the user name from the users table: {{ $listpage->user->name }}

                <table>
                    <thead>
                        <th>Product Name</th>
                        <th>Registered User</th>
                    </thead>
                    <tbody>
                        @foreach ($listpages as $listpage)
                            <tr>
                                <!-- Product Name -->
                                <td class="table-text">
                                    <div>{{ $listpage->product_name }}</div>
                                </td>
                                <!-- Registered User -->
                                <td class="table-text">
                                    <div>{{ $listpage->user->name }}</div>
                                </td>
                            </tr>
                        @endforeach
                    </tbody>
                </table>

As shown above, using relationships makes it easy to retrieve and display both product names and user names.
By utilizing Laravel’s Eloquent, code readability improves and maintenance becomes easier.

Route Setup – Route (Page URL) Description

Finally, configure the page URL.
By adding an access route to the Route file, the listing page can be easily displayed.
Accessing https:// ~ /listpages will display the listing page. Modify the page URL as needed.

Route::get('/listpages', 'ListpagesController@listdata');

By adding the above code to the Route file, accessing https://~/listpages will display the listing page.
Feel free to change the route name or URL path as needed.

Summary

This article explained how to join data between two tables and configure relationships using Laravel.
By leveraging Eloquent’s relationship features, you can easily retrieve and display data across different tables.
We provided a step-by-step guide to help even beginners implement the solution.
Try writing and testing the code yourself to get used to database operations and relationship settings.

* Please use at your own risk if reusing this content.