2015-05-20 12 views
6

Ich habe Probleme beim eifrigen Laden. Lassen Sie uns sagen, ich habe Modelle der Mitglieder, TrainingCategory, TrainingCategoryResult und AnmeldungLaravel 4.1 eifrig laden

Mitglied Modell:

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 Modell:

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

TraningCategoryResult Modell:

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

Registrierung Modell :

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

Ich versuche, zu eifrig Last alle Registrierungsinformationen und die dazugehörigen Informationen einschließlich der TraningCategoryResult info, aber ich bin nicht sicher, wie man das TraningCategoryResult zu erhalten, die zwei Fremdschlüssel erforderlich (category_id und member_id), ist es eine Möglichkeit, TU das?

Hier ist mein Code atm:

$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']); 

Danke.

+0

Ich bin mir nicht sicher, ob ich das richtig verstehe, aber warum können Sie nicht einfach beitreten? etwas wie Member :: with ('categoryResult') -> mit ('registration') -> get() oder Mitglied :: mit (array ('categoryResult', 'registration')) -> get() (sein Pseudocode, nicht sicher, wie es funktionieren wird) – mmmm

+0

Funktioniert das? 'Registrierung :: mit ('member.trainingCategoryResults') -> get();' – Torgheh

Antwort

0

Dies wird Mitglied nicht funktionieren :: mit ('categoryResult') -> mit ('Registrierung') -> get()

Sie eine neue Beziehung in dem Mitglied Modell machen können

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

// und dann

anrufen

Mitglied :: mit ('categoryResult') -> get();

0

könnten Sie ein paar Optionen verwenden, das zu erreichen:

OPTION 1: Erstellen Sie eine variable Beziehung

Ändern Sie Ihre Beziehung im Modell Mitglied

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

Der obige Code haben könnte Einschränkungen und es nutzt nicht viele Laravel-Funktionen, aber es wird funktionieren.

OPTION 2: Zugriff von Beziehung

Sie halten alles wie es ist, und der Last wie folgt:

$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 
    } 
)) 

Auf diese Weise müssen Sie nur, was Sie brauchen, vorausgesetzt, Sie kennen die $ category_id

Verwandte Themen