Reputation: 1148
I have three tables
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
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
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
public function partners() { return $this->belongsTo(City::class); } public function cities() { return $this->hasMany(Partner::class); }
public function partners() { return $this->belongsToMany(City::class); } public function cities() { return $this->belongsToMany(Partner::class); }
Upvotes: 0