我有一个名为Content
的表,它是一个像
Content : id content_name created_at updated_at
和另一个表Course
一样
Course table have many content_id
Course : id content_id course_name created_at updated_at
我创造了这样的关系。
Content Model
class Content extends Eloquent {
protected $table = 'contents';
protected $guarded = array('id');
public function course()
{
return $this->belongsTo('Course');
}
}
Course Model
class Course extends Eloquent {
protected $table = 'courses';
protected $guarded = array('id');
public function content()
{
return $this->hasMany('Content');
}
}
当我出现这样的数据时
$courses=Course::find(1)->content;
它会抛出错误,如
SQLSTATE [42S22]:未找到列:1054未知列' contents.course_id'在' where子句' (SQL:从
contents
中选择*contents
。course_id
= 1)
我不能纠正关系中的问题,因为我是laravel的新手。
答案 0 :(得分:1)
关闭,但你的关系倒退了。具有外键的表是属于另一个的表。在这种情况下,您的course
表格中包含外键content_id
,因此Course
属于Content
,Content
有一个或多个Course
第
class Content extends Eloquent {
public function course() {
return $this->hasMany('Course');
}
}
class Course extends Eloquent {
public function content() {
return $this->belongsTo('Content');
}
}
答案 1 :(得分:0)
$table->integer('content_id)->unsigned()->index();
$table->foreign('content_id')
->references('id')
->on('contents')
->onDelete('cascade');
答案 2 :(得分:0)
我真的不明白你的桌子设计,也许它应该是这样的。
接受你的陈述:“课程表有很多content_id ”。我觉得你说1门课程可以有多个内容,是吗?如果是,您可能希望将表格设计更改为如下所示
void updateRegions() {
computeClosestGridCoord(myPosition); // which is center of your current region
lookForNeighbourRegions(regionsArray); // and add new Region if needed
deleteOldRegionsStuff(regionsArray);
}
内容迁移代码
Course
======
id
course_name
created_at
updated_at
Content
=======
id
course_id (set this as FK)
content_name
created_at
updated_at
然后在你的模特中
public function up()
{
Schema::create('content', function(Blueprint $table)
{
$table->engine = 'InnoDB';
$table->increments('id');
$table->integer('course_id')->unsigned();
$table->string('content_name');
});
Schema::table('content',function($table)
{
$table->foreign('course_id')->references('id')->on('course')->onDelete('cascade');
});
}
然后通过急切加载来访问您的数据
class Course extends Eloquent
{
protected $table = 'course';
public function content()
{
return $this->hasMany('content', 'course_id', 'id');
}
}
class Content extends Eloquent
{
protected $table = 'content';
public function course()
{
return $this->belongsTo('course', 'course_id', 'id');
}
}
OR
$course = Course::with('content')->get();
答案 3 :(得分:0)
这是关于确定关联。你的协会应该是:
内容强> 内容有很多课程
class Content extends Eloquent {
protected $table = 'contents';
protected $guarded = array('id');
public function courses()
{
return $this->hasMany('Course');
}
}
场
该课程属于内容。
class Course extends Eloquent {
protected $table = 'courses';
protected $guarded = array('id');
public function content()
{
return $this->belongsTo('Content');
}
}
所以你可以做查询关联。 用于查找内容 - >课程:
$courses = Content::find(1)->courses;
寻找课程 - >含量:
$content = Course::find(1)->content;