Laravel - Désireux de Chargement Polymorphe de la Relation d'Modèles associés

Je peux désireux de charge polymorphes relations/modèles sans n+1 points. Cependant, si j'essaie d'accéder à un modèle de la polymorphes modèle, le n+1 problème s'affiche et je n'arrive pas à trouver une solution. Voici la configuration exacte de voir localement:

1) DB nom de la table de données/

history

Laravel - Désireux de Chargement Polymorphe de la Relation d'Modèles associés

companies

Laravel - Désireux de Chargement Polymorphe de la Relation d'Modèles associés

products

Laravel - Désireux de Chargement Polymorphe de la Relation d'Modèles associés

services

Laravel - Désireux de Chargement Polymorphe de la Relation d'Modèles associés

2) des Modèles

//History
class History extends Eloquent {
    protected $table = 'history';

    public function historable(){
        return $this->morphTo();
    }
}

//Company
class Company extends Eloquent {
    protected $table = 'companies';

    //each company has many products
    public function products() {
        return $this->hasMany('Product');
    }

    //each company has many services
    public function services() {
        return $this->hasMany('Service');
    }
}

//Product
class Product extends Eloquent {
    //each product belongs to a company
    public function company() {
        return $this->belongsTo('Company');
    }

    public function history() {
        return $this->morphMany('History', 'historable');
    }
}

//Service
class Service extends Eloquent {
    //each service belongs to a company
    public function company() {
        return $this->belongsTo('Company');
    }

    public function history() {
        return $this->morphMany('History', 'historable');
    }
}

3) de Routage

Route::get('/history', function(){
    $histories = History::with('historable')->get();
    return View::make('historyTemplate', compact('histories'));
});

4) Modèle avec n+1 enregistré uniquement becacuse de $histoire->historable->l'entreprise->nom, commentaire, n+1 s'en va.. mais nous avons besoin d'un lointain liées nom de la société:

@foreach($histories as $history)
    <p>
        <u>{{ $history->historable->company->name }}</u>
        {{ $history->historable->name }}: {{ $history->historable->status }}
    </p>
@endforeach
{{ dd(DB::getQueryLog()); }}

J'ai besoin d'être en mesure de charger les noms de la société avec impatience (en une seule requête) que c'est un modèle de la polymorphes modèles de relations Product et Service.
J'ai travaillé sur ce projet pendant des jours, mais ne peut pas trouver une solution.
History::with('historable.company')->get() ignore juste les company dans historable.company.
Ce serait une solution efficace à ce problème?

  • vous pouvez désireux de charge Company modèle dynamiquement par $historables->load('company')
  • J'ai ajouté une mise à jour, où serait votre suggestion avides de charger Company?
InformationsquelleAutor Wonka | 2014-11-04