如何使用 link table 和 Eloquent?

How to use link table with Eloquent?

在我的 Laravel 4 应用程序中,我有两个模型:Country 和 Grade 将它们写为:

Country.php:

class Country extends Eloquent {
    protected $fillable = [];

    public function grades()
    {
        return $this->hasMany('Grade', 'title');
    }
}

Grade.php:

class Grade extends Eloquent {
    protected $fillable = [];

    public function country()
    {

        return $this->belongsTo('Country');
    }
}

当我尝试获取特定国家/地区的所有成绩时:

return Response::json(Country::find($country_id)->grades());

但这会导致空对象{}

我正在使用多对多 link table:

Schema::create('countries_grades', function(Blueprint $table)
        {
            $table->increments('id');
            $table->integer('country_id');
            $table->integer('grade_id');
            $table->timestamps();
        });

好像laravel没有使用上面的table,请问正确的实现方式是什么?

编辑

感谢下面的回答!但我发现无论我做什么,如果我将 graded 作为方法调用,我将得到空对象:

return Response::json(Country::find($country_id)->grades());

这应该是:

return Response::json(Country::find($country_id)->grades);

否则,如果我对 GradeCountry

使用 belongsToMany 效果很好

希望这对其他人有帮助!

根据您尝试定义多对多查询的架构,正确的做法是返回对方法 belongsToMany() 的调用。示例:

class Country extends Eloquent {
    protected $fillable = [];

    public function grades()
    {
        return $this->belongsToMany('Grade', 'countries_grades');
    }
}

和...

class Grade extends Eloquent {
    protected $fillable = [];

    public function country()
    {

        return $this->belongsToMany('Country', 'countries_grades');
    }
}

更新一对多关系

如果你想实现一个国家有很多等级,一个等级属于一个国家,你必须做以下事情。

gradestable中添加一个叫country_id的整型字段,然后给你添加如下关系类:

class Country extends Eloquent {
    protected $fillable = [];

    public function grades()
    {
        return $this->hasMany('Grade');
    }
}

和...

class Grade extends Eloquent {
    protected $fillable = [];

    public function country()
    {

        return $this->belongsTo('Country');
    }
}

那么在这之后,一个国家可以这样访问等级:

$country = Country::find(1);
$country->grades;

要获得成绩所属的国家,可以这样:

$grade = Grade::find(1);
$grade->country;