Keshari Nandan
Keshari Nandan

Reputation: 1148

Laravel Relationship in between 3 tables

I have three tables

  1. partners
  2. Partner_cities
  3. cities

Partners Table -

id     | Name
------ | ------
1      | Oracle
2      | TCS

Partner_Cities Table

id     | partner_id   | city_id
------ | ------
1      | 1            | 2
2      | 1            | 3

Cities Table

id     | Name
------ | ------
1      | Delhi
2      | Mumbai

Now I want the relationship in between partners and cities table.

My Partner Model has

public function cities(){
    return $this->belongsToMany(City::class, 'partner_cities')  ;
}

and City Model has -

public function partners(){
    return $this->belongsToMany(Partner::class, 'partner_cities');
}

I am getting -

ErrorException in ObjectDataRow.php line 21:
Undefined property: Illuminate\Database\Eloquent\Collection::$name

Upvotes: 1

Views: 1064

Answers (2)

Joe1992
Joe1992

Reputation: 468

You partner model should be more like:

public function cities(){
    return $this->belongsToMany(City::class);
}

And your City Model like:

public function partners(){
    return $this->belongsToMany(Partner::class);
}

Rename your partner_cities table to city_partner (following Laravel's naming conventions) and remove the id column.

You can read more about many-many relationships in the docs:

Upvotes: 2

wbail
wbail

Reputation: 566

Partners and Cities is many to many relationchip already, so you have the Partner_Cities as pivot table.

https://laravel.com/docs/5.4/eloquent-relationships#many-to-many

Check this

  1. One to Many

    public function partners() {
        return $this->belongsTo(City::class);
    }

    public function cities() {
        return $this->hasMany(Partner::class);
    }

  1. Many to Many

    public function partners() {
        return $this->belongsToMany(City::class);
    }

    public function cities() {
        return $this->belongsToMany(Partner::class);
    }

Upvotes: 0

Related Questions