Laravel France

Problème polymorphisme

  • Avatar de XavierDlm
    Membre depuis :
    01/12/2017
    Messages :
    17

    Bonjour alors voila j'avait deja poster sur ce forum sans avoir trouver de veritable solution et je me retrouve coincer cette fois ci , je reexplique mon probleme jai un table "mere" produit et une autre table treuil , (ci joint la structure des deux table)

    et voici leur model

    class Produit extends Model
    {
    public function produitable()
    {
    return $this->morphTo();
    }
    public function souscategorie()
    {
    return $this->belongsTo('App\Models\Souscategorie', 'souscategories_id');
    }
    public function lignecommande()
    {
    return $this->hasMany('App\Models\Produit');
    }
    }

    class Treuil extends Model
    {
    public function produits()
    {
    return $this->morphOne('App\Models\Produit', 'produitable');
    }
    }

    et j'aimerais pouvoir faire ca ( sous categorie_1 = treuil)

    $LesTreuils = Produit::where('souscategories_id', 1)
    ->where('actif', 'False')
    ->orderBy('modele', 'asc')
    ->get();

    Sauf que ce n'est pas possible car modele est un champ de la table treuil et jai deja essayer avec " ->produitable () " entre le where et le order et de beaucoup d'autre facon mais rien ne marche ... et c'est tres problematique car meme si je fait la meme chose depuis la table Treuil c'est le champ actif qui est dans la table produit qui n'est plus reconnu ... et je ne peut pas faire de vrai requete car étant un polymorphisme il n'y a pas de clée etrangere , je suis donc bloquer et je ne voie aucune solution . Si vous avez besoin d'autre chose pour m'aider dite le moi . Merci d'avance

  • Avatar de jay4sem
    Membre depuis :
    25/04/2016
    Messages :
    44

    Salut, tu peux essayer ça :

    $lesTreuils = Produit::with(array('souscategorie', function ($item) use ($sousCatId){
    return $item->where('souscategories_id', '=', $sousCatId)
    }))->get();

    De mon côté, ca marche...

  • Avatar de XavierDlm
    Membre depuis :
    01/12/2017
    Messages :
    17

    Oui cela marche mais c'est parce que cest pas ce que je recherche :) , il me manque le fait de pouvoir utiliser le orderBy('modele','asc') qui est un champ de la table Treuil et non produits , la relation et du polymorphisme je peut donc pas lier les deux table dans la vue je procede comme cela pour aller prendre un champ de la table treuils depuis la table produits dans un foreach de $lesTreuils as $unTreuil

    $unTreuil->produitable->modele ;

    mais dans le controller je ne sais pas comment faire .

  • Avatar de jay4sem
    Membre depuis :
    25/04/2016
    Messages :
    44

    Salut,

    ok, au temps pour moi,je n'avais pas saisi la nuance, essaye ça :

    $array = [];
    $test = $this->comment->with(array('produitable' => function($items) use(&$array){
    foreach ($items->get() as $model)
    {
    if($model->commentable instanceof Clinic)
    {
    $array = $model->commentable->orderBy('modele', 'asc')->get();
    }
    }
    }))->get();

    return $array;

    Ca devrait le faire

Vous ne pouvez pas répondre à ce sujet.