2013-04-25 30 views
10

Tôi đã xem xét các mối quan hệ trong Laravel 4 trong documentation và tôi đang cố gắng tìm ra những điều sau đây.Mối quan hệ Laravel

Tôi có một bảng trong cơ sở dữ liệu của tôi được gọi là 'sự kiện'. Bảng này có các trường khác nhau chủ yếu chứa ID có liên quan đến các bảng khác. Ví dụ, tôi có một bảng 'khóa học'. Bảng sự kiện chứa một trường có tên 'course_id' có liên quan đến ID của trường 'id' trong bảng các khóa học.

Vì vậy, về cơ bản, tôi sau một số lời khuyên về cách bạn đi về liên quan đến hai (thuộcTo()?) Và sau đó chuyển dữ liệu được kết nối đến chế độ xem.

Đây là nơi tôi đang ở cho đến thời điểm này http://paste.laravel.com/pf3.

Tôi hy vọng các bạn có thể cho tôi một số lời khuyên về cách tốt nhất để tiếp cận vấn đề này. Cảm ơn.

Gaz

Trả lời

11

Về cơ bản đây là câu trả lời giống như @Marko Aleksić, nhưng với các mối quan hệ hasOne() và thuộcToTo() đúng cách xung quanh.

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 
    } 

} 
8

Bạn cần chỉ định trong cả hai mô hình một mối quan hệ. belongsTo() trong một, hasOne() trong khác, kể từ khi bạn đang sử dụng một-một mối quan hệ

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

} 

Sau đó gọi nó trong lộ trình hoặc bộ điều khiển sẽ là như sau:

khóa học của sự kiện cụ thể (trong trường hợp này với id của 1)

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

tổ chức sự kiện của khóa học cụ thể (trong trường hợp này với id của 1)

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

hãy tham khảo tài liệu Laravel 4, phần hùng biện ORM: http://laravel.com/docs/eloquent#one-to-one

+0

Xin chào, không có lỗi. Một sự kiện sẽ chỉ bao giờ có 1 khóa học liên kết với nó. –

+0

Sau đó, thay vì sử dụng hasMany isTo() với hasOne() –

+1

Một mối quan hệ hasOne() khớp 'id' của mô hình 'này' với một 'foreignKey' trong bảng có liên quan. Một mối quan hệ thuộc về() tương ứng với 'id' của bảng có liên quan với trường 'localKey' trên mô hình 'this'. Một cách khác để suy nghĩ về nó là mối quan hệ thuộc() phải sống trên mô hình có trường liên kết đến id bảng liên quan. Mối quan hệ hasOne() phải tồn tại trên mô hình được 'liên kết với' bởi một trường trên một bảng có liên quan. ----- Tất cả những gì đang được nói, câu trả lời trên dường như là sai đường xung quanh cho OP nói "bảng sự kiện có chứa một lĩnh vực được gọi là 'course_id'" –

0

Mẫu

public function events(){ 
     return $this->belongsTo('Events', 'id_events'); 
    } 

khiển

protected events; 

public _construct(SomeTable $table){ 
    $this->table = $table; 
    $this->events = Events::select('id', 'name')->get()->lists('name', 'id'); 
} 

public create(){ 
    return View::make('someTable.create', compact('someTable'))->with('events', $this->events); 
} 

Xem

<td>The Events Name!:</td> 
{{Form::select('id_events', $events)}} 

làm việc cho tôi;)