template temas sirve section scripts que para how example buy php laravel-4 eager-loading

temas - php laravel templates



Laravel 4.1 carga ansiosa (2)

Estoy teniendo problemas con la carga ansiosa. Digamos que tengo modelos de Miembros, Categoría de Entrenamiento, Informe de Categoría de Entrenamiento y Registro

Modelo de miembro:

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

Modelo de formación de categoría:

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

TraningCategoryResult Model:

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

Modelo de registro:

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

Estoy tratando de cargar toda la información de registro y su información relacionada, incluida la información de TraningCategoryResult pero no estoy seguro de cómo obtener ese TraningCategoryResult que requiere dos claves foráneas (category_id y member_id), ¿hay alguna manera de hacerlo?

Aquí está mi código 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'']);

Gracias.


Esto no funcionará Member :: with (''categoryResult'') -> with (''registration'') -> get ()

Puede hacer una nueva relación en el Modelo de miembro

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

// y luego llamar

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


Puede usar algunas opciones para lograr eso:

OPCIÓN 1 : crea una relación variable

Cambie su relación en el modelo de miembro

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

El código anterior puede tener limitaciones y no aprovecha muchas características de laravel, pero funcionará.

OPCIÓN 2: Acceso desde la relación

Puede mantener todo tal como está y cargar de la siguiente manera:

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

De esta forma, solo tendrás lo que necesitas, suponiendo que conozcas el $ category_id