web-dev-qa-db-ja.com

Laravel関係

私はLaravel 4 documentation の4)で関係を調べてきましたが、以下を解決しようとしています。

データベースに「イベント」というテーブルがあります。このテーブルには、主に他のテーブルに関連するIDを含むさまざまなフィールドがあります。たとえば、「コース」テーブルがあります。イベントテーブルには、コーステーブルの「id」フィールドのIDに関連する「course_id」というフィールドがあります。

つまり、基本的には、2つ(belongsTo()?)を関連付けて、接続されたデータをビューに渡す方法について、いくつかアドバイスを求めています。

ここに私が今のところ http://paste.laravel.com/pf があります。

皆さんが私にこの問題に取り組む最善の方法についていくつかのアドバイスを提供できることを願っています。ありがとう。

ガス

13
Gareth Daine

これは基本的に@MarkoAleksićと同じ答えですが、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
    }

}
16
Dave Amphlett

両方のモデルで関係を指定する必要があります。 1対1の関係を使用しているため、oneには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

8
Marko Aleksić