Question

I've been looking over relationships in Laravel 4 in the documentation and I'm trying to work out the following.

I have a table in my database called 'events'. This table has various fields that mainly contain ID's that relate to other tables. For example, I have a 'courses' table. The events table contains a field called 'course_id' which relates to the ID of the 'id' field in the courses table.

So basically, I'm after some advice on how you go about relating the two (belongsTo()?) and then passing the connected data to the view.

Here is where I am at so far http://paste.laravel.com/pf3.

I hope you guys are able to give me some advice on how best to approach this problem. Thanks.

Gaz

Was it helpful?

Solution

This is basically the same answer as @Marko Aleksić, but with the hasOne() and belongsTo() relationships the right way around.

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
    }

}

OTHER TIPS

You need to specify in both models a relationship. belongsTo() in one, hasOne() in the other, since you are using one-to-one relationship

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');
    }

}

Then calling it in the route or the controller would be as following:

Course of specific event (in this case with id of 1)

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

Event of specific course (in this case with id of 1)

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

Please refer to the Laravel 4 documentation, section Eloquent ORM: http://laravel.com/docs/eloquent#one-to-one

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top