Home > database >  How to join two table in laravel 8 with no duplicate
How to join two table in laravel 8 with no duplicate

Time:06-17

I have two tables. Customer and address. The relationship of the table is that a CUSTOMER can have many ADDRESSES. So what I want as a result to my query is to get the list of customer and only one latest address

ADDRESS TABLE
id : 1
city:"cebu"
zip_code:"600"
cus_id:1

id:2
city:"mandaue"
zip_code:"6001"
cus_id:1

CUSTOMER TABLE
id: 1
name:"JOHN DOE"

What I want to get the customer "JOHN DOE" and the address with ID "2"

CodePudding user response:

you can use Eloquent ORM in laravel.

Eloquent : You must setting in your customer model

Class Customer(){
public function address()
{
   return $this->hasMany(Address::class, 'cuss_id', 'id')->latest();
}

in your Adress model :

Class Address(){
public function customer()
{
   return $this->belongsTo(Customer::class, 'id', 'cuss_id')
}

Then in your controller you can call the model :

$data = Customer::with('address')->get();

CodePudding user response:

If you want to get only one latest address, you can use hasOne same as :

// Customer model relation
public function lastestAddress()
{
    return $this->hasOne(Address::class, 'customer_id')->orderBy('id', 'desc');
}

And

$model = Customer::with('lastestAddress')

CodePudding user response:

So you have two tables: customers and addresses, with a "one customer can have many addresses" relationship.

In Laravel, we normally use Eloquent models to query the database. So to get a customer and all its addresses, we must first model the database; each table with its own Eloquent model. (See details in the docs.)

class Address extends Model
{
    // although empty for now, this class definition is still important
}
class Customer extends Model
{
    /**
     * Get the latest address.
     */
    public function currentAddress()
    {
        return $this->hasOne(Address::class, 'cus_id')->latestOfMany();
    }
}

In the Customer model, our currentAddress() method defines how a Customer instance related to the Address instances.

It's like we're saying,

"A customer may have many Addresses. Just get one which is the latestOfMany. That's how we'll get the customer's currentAddress.

Now that we have the necessary Eloquent models setup, we can lookup John Doe and his current address.

$johnDoeId = 1;

// query the database for customer 1, including its current address
$johnDoe = Customer::with('currentAddress')->find($johnDoeId);

$johnDoe->currentAddress; //            
  • Related