如何使用 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);
否则,如果我对 Grade
和 Country
使用 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');
}
}
更新一对多关系
如果你想实现一个国家有很多等级,一个等级属于一个国家,你必须做以下事情。
在grades
table中添加一个叫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;
在我的 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);
否则,如果我对 Grade
和 Country
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');
}
}
更新一对多关系
如果你想实现一个国家有很多等级,一个等级属于一个国家,你必须做以下事情。
在grades
table中添加一个叫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;