2015-05-20 16 views
6

Ho problemi con il carico impaziente. Diciamo che ho modelli di Membri, TrainingCategory, TrainingCategoryResult e registrazioneLaravel 4.1 carico ansioso

Stati Modello:

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

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

TraningCategoryResult Modello:

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

Registrazione Girl :

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

sto provando a carico desiderosi tutte le informazioni di registrazione e il suo informazioni correlate tra cui informazioni TraningCategoryResult ma non sicuro di come ottenere che TraningCategoryResult che ha richiesto due chiavi esterne (category_id e MEMBER_ID), c'è qualche modo per Fai quello?

Ecco il mio codice 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']); 

Grazie.

+0

Non sono sicuro se lo capisco correttamente, ma perché non puoi unirti? qualcosa come Member :: with ('categoryResult') -> with ('registration') -> get() o Member :: with (array ('categoryResult', 'registration')) -> get() (il suo pseudo codice, non è sicuro di come funzionerà) – mmmm

+0

Funziona? 'Registrazione :: con ('member.trainingCategoryResults') -> get();' – Torgheh

risposta

0

Questo non funziona Stati :: con ('categoryResult') -> con ('registrazione') -> get()

È possibile effettuare una nuova relazione in Stati Modello

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

// e quindi chiama

Membro :: with ('categoryResult') -> get();

0

Si potrebbe utilizzare alcune opzioni per raggiungere questo:

OPZIONE 1: creare un rapporto variabile

Modifica della relazione nel modello Stati

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

Il codice di cui sopra potrebbe avere limitazioni e non sfrutta molte funzionalità di laravel, ma funzionerà.

OPZIONE 2: accesso dalla relazione

È possibile mantenere tutto come è, e il carico come segue:

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

In questo modo si avrà solo quello che serve, supponendo che si conosce il $ category_id