2015-05-20 15 views
6

Tôi đang gặp sự cố khi tải dữ liệu. Hãy nói rằng tôi có các mô hình của các thành viên, TrainingCategory, TrainingCategoryResult và đăng kýLaravel 4.1 háo hức tải

Member mẫu:

public function registration() { 
    return $this->hasMany('Registration', 'member_id'); 
} 
public function trainingResults(){ 
    return $this->hasMany('trainingResult', 'member_id'); 
} 
public function trainingCategoryResults() { 
    return $this->hasMany('TrainingCategoryResult', 'member_id'); 
} 

TrainingCategory mẫu:

public function trainings() { 
    return $this->hasMany('Training', 'id'); 
} 
public function trainingCategoryResults() { 
    return $this->hasMany('trainingCategoryResult', 'category_id'); 
} 

TraningCategoryResult mẫu:

public function category() { 
     return $this->belongsTo('TrainingCategory', 'id'); 
    } 
    public function member() { 
     return $this->belongsTo('Member', 'id'); 
    } 

Đăng ký mẫu :

public function course() { 
    return $this->belongsTo('Course', 'course_id'); 
    } 
    public function member() { 
    return $this->belongsTo('Member', 'id'); 
    } 

Tôi cố gắng để tải háo hức tất cả các thông tin đăng ký và thông tin liên quan của nó bao gồm các thông tin TraningCategoryResult nhưng tôi không chắc chắn làm thế nào để có được điều đó TraningCategoryResult mà cần hai phím nước ngoài (category_id và member_id), là có cách nào để làm việc đó đi?

Đây là mã atm của tôi:

$members= Member::where(function($query) use ($id, $site) { 
    $query 
    ->where('id', '=', $id) 
    ->where('site', '=', $site); 
    }); 

$members= $members 
    ->with('registration.course', 
    'registration.course.traningCategories', 
    ->get(['member.id']); 

Cảm ơn bạn.

+0

Tôi không chắc liệu tôi có hiểu điều này đúng không, nhưng tại sao bạn không thể tham gia? giống như Member :: with ('categoryResult') -> với ('registration') -> get() hoặc Thành viên :: with (array ('categoryResult', 'registration')) -> get() (mã giả của nó, không chắc chắn nó sẽ hoạt động như thế nào) – mmmm

+0

Tính năng này có hoạt động không? 'Đăng ký :: với ('member.trainingCategoryResults') -> get();' – Torgheh

Trả lời

0

này sẽ không hoạt thành viên :: với ('categoryResult') -> với ('đăng ký') -> get()

Bạn có thể làm cho một mối quan hệ mới trong Member Mẫu

public function categoryResult() 
{ 
    return $this->belongsTo('Category')->with('Registration'); 
} 

// và sau đó gọi

Thành viên :: with ('categoryResult') -> get();

0

Bạn có thể sử dụng một vài lựa chọn để đạt được điều đó:

OPTION 1: tạo ra một mối quan hệ biến

Thay đổi quan hệ của bạn trong mô hình thành viên

public function trainingCategoryResults($category_id = null) { 
    if(empty($category_id)) 
    return $this->hasMany('TrainingCategoryResult', 'member_id'); 
    else 
    return $this->hasMany('TrainingCategoryResult', 'member_id') 
     ->where('category_id', $category_id); 
} 

Đoạn mã trên có thể có những hạn chế và nó không tận dụng được nhiều tính năng của Laravel, nhưng nó sẽ hoạt động.

OPTION 2: Truy cập từ mối quan hệ

Bạn có thể giữ tất cả mọi thứ như nguyên trạng và tải như sau:

$members= Member::where(function($query) use ($id, $site) { 
    $query 
    ->where('id', '=', $id) 
    ->where('site', '=', $site); 
}) 
->where('id', $member_id) // set the id of the memeber 
->with(array(
    'traningCategoryResults' => function($q)use($category_id){ 
    $q->where('category_id', $category_id); // This makes sure you get only desired results 
    } 
)) 

Bằng cách này, bạn sẽ chỉ những gì bạn cần có, giả sử bạn biết $ category_id

Các vấn đề liên quan