Laravel属于ToMany Intermediary Table

时间:2014-07-02 20:43:49

标签: laravel

我有3个表格如下:

市场

  • ID
  • 名称

Market_to_City

  • market_id
  • city_id

城市

  • ID
  • 名称

和一个看起来像的模型:

class Market extends Eloquent {
    protected $table = 'Market';

    public function citys() {
        return $this->belongsToMany('City', 'Market_to_City', 'market_id', 'city_id');
    }
}

每个市场都有许多城市通过Market_to_City表进行映射。城市方法应该返回与市场相关的城市集合。然而,每次都返回一个空集合,我使用正确的模型关系吗?

1 个答案:

答案 0 :(得分:2)

您的方法看起来是正确的。但请注意,您已将其命名为citys而不是cities,这可能是也可能不是在此处发布您的问题时的拼写错误。正确的复数形式的citycities,你应该纠正它,因为Laravel经常使用自动复数并假设你的英语是正确的。

此外,您的模型名为Market,而在评论中您正在调用GTM_Market

它还假设Market对象没有cities属性,因此它将成功回退到然后触发关系查询的方法。如果您事先声明了该属性,Laravel将永远不会达到该方法。

class Market extends Eloquent {

    public $cities = 'Foo';

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

$market = Market::find(205);

echo $market->cities; // Echoes 'Foo' instead of the relationship.

最后,在完成上述所有操作后,您可以像这样急切地加载关系:

Market::with('cities')->find(205);