Laravel在三张桌子之间的关系

时间:2017-06-21 13:10:10

标签: laravel relationship

我有三张桌子

  1. 伙伴
  2. Partner_cities
  3. 城市
  4. 合作伙伴表 -

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

    Partner_Cities表

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

    城市表

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

    现在我想要合作伙伴城市表之间的关系。

    我的合作伙伴模型

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

    和City Model有 -

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

    我正在 -

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

2 个答案:

答案 0 :(得分:0)

合作伙伴和城市已经多对多关系芯片,因此您将Partner_Cities视为 pivot 表。

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

检查

  1. 一对多
  2. 
        public function partners() {
            return $this->belongsTo(City::class);
        }
    
        public function cities() {
            return $this->hasMany(Partner::class);
        }
    
    
    1. 多对多
    2. 
          public function partners() {
              return $this->belongsToMany(City::class);
          }
      
          public function cities() {
              return $this->belongsToMany(Partner::class);
          }
      
      

答案 1 :(得分:0)

你的伴侣模特应该更像:

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

你的城市模型如:

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

将您的partner_cities表重命名为city_partner(遵循Laravel的命名约定)并删除id列。

您可以在docs

中详细了解许多关系