13

我一直在文档中查看 Laravel 4 中的关系,并且正在尝试解决以下问题。

我的数据库中有一个名为“事件”的表。该表有各种字段,主要包含与其他表相关的 ID。例如,我有一个“课程”表。events 表包含一个名为“course_id”的字段,该字段与 course 表中“id”字段的 ID 相关。

所以基本上,我正在就如何将两者联系起来(belongsTo()?)然后将连接的数据传递给视图提出一些建议。

到目前为止,这是我所在的位置http://paste.laravel.com/pf3

我希望你们能够就如何最好地解决这个问题给我一些建议。谢谢。

天然气

4

2 回答 2

16

这与@Marko Aleksić 的答案基本相同,但是 hasOne() 和 belongsTo() 关系是正确的。

class Course extends Eloquent{

    protected $table = 'courses';


    public function event()
    {
        return $this->hasOne('Event'); // links this->id to events.course_id
    }
}


class Event extends Eloquent {

    protected $table = 'events';

    public function course()
    {
        return $this->belongsTo('Course'); // links this->course_id to courses.id
    }

}
于 2015-03-02T10:48:24.440 回答
8

您需要在两个模型中指定关系。一个中的 belongsTo(),另一个中的 hasOne(),因为您使用的是一对一的关系

class Course extends Eloquent{

    protected $table = 'courses';


    public function event()
    {
        return $this->belongsTo('Event');
    }
}


class Event extends Eloquent {

    protected $table = 'events';

    public function course()
    {
        return $this->hasOne('Course');
    }

}

然后在路由或控制器中调用它如下:

特定事件的过程(在这种情况下,id 为 1)

$course = Event::find(1)->course;

特定课程的事件(在这种情况下,id 为 1)

$event = Course::find(1)->event;

请参考 Laravel 4 文档,Eloquent ORM 部分:http: //laravel.com/docs/eloquent#one-to-one

于 2013-04-25T09:51:44.177 回答