Besoin d'aide ?

Utiliser une configuration pour plusieurs modèles

  • Avatar de PLJerem
    Membre depuis :
    10/01/2019
    Messages :
    20

    Bonjour,

    J'ai besoin de vos conseils pour trouver la méthode la plus optimisée.

    J'ai des activités qui portent des numéros définis :

    • 100 : à traiter
    • 108 : en exécution
    • 200 : fini
    • etc..

    Les numéros pour ces activités peuvent évoluer (100 peut devenir 300, etc...)
    Afin de ne pas devoir changer mon code source à chaque fois j'ai créé une table listant ces différentes activités :

    • activites_config :
      • slug
      • activite
        Du coup je me retrouve avec des enregistrements du genre : (100,ATRAIT), (108,ENEXEC), (200,FINI). Ainsi dans mon code je ne veux utiliser que mes slugs.

    J'ai une table qui contient tous mes équipements :

    • equipements :
      • id
      • equipement

    Pour cette table j'ai le modèle suivant :

    namespace App\Models;

    use Illuminate\Database\Eloquent\Model;

    class equipements extends Model
    {
    /*
    The table associated with the Model
    @var string
    /
    protected $table = 'equipements';

    /*
    Relation avec la table "activites_1"
    @return \Illuminate\Database\Eloquent\Relations\HasMany
    /
    public function gmaoActivites1() {
    return $this->hasMany('App\Models\Activities\Activites1', 'equipement_id');
    }
    }

    J'ai plusieurs tables qui contiennent des activités pour des équipements, par exemple :

    • activites_1 :
      • id
      • equipement_id
      • activite (contenant le numéro de l'activité)
      • equipement_id
      • description
      • etc...

    Pour cette table activites_1 j'ai mon modèle :

    namespace App\Models\Activites;

    use Illuminate\Database\Eloquent\Model;

    class Activites1 extends Model
    {
    /
    The table associated with the Model
    @var string
    */
    protected $table = 'activites_1';

    /*
    Scope filtrant les activités à traiter
    @return mixed
    /
    public function scopeATRAIT($query) {
    return $query->where('activite', '=', ???);
    }

    /

    Scope filtrant les activités finies
    @return mixed
    */
    public function scopeFINI($query) {
    return $query->where('activite', '=', ???);
    }
    }

    Comme vous pouvez le voir ci-dessus j'ai créé des scopes pour récupérer que les activitées qui ont le type d'activité qui m'est utile. Je bloque pour trouver une solution.

    Maintenant en gros ce que je voudrais faire facilement c'est ça :

    // Un équipement portant l'ID 1
    $equipement = Equipement::find('1');

    // Les activités de cet équipement dont l'activité est "à traiter"
    $atraiter = $equipement->activites()->ATRAIT();

    // Les activités de cet équipement dont l'activité est "finie"
    $fini = $equipement->activites()->FINI();

    Quelle technique étant la moins consommatrice de ressources peut me permettre d'injecter les bons numéros d'activités dans les SCOPE des modèles ayant un filtre activité ?

    Merci de votre support :)

  • Avatar de PLJerem
    Membre depuis :
    10/01/2019
    Messages :
    20

    J'ai trouvé un premier élément de réponse en partant sur cette technique sur le SCOPE :

    /*
    Méthode retournant les activités à traiter
    @return mixed
    /
    public function scopeATRAIT($query) {;
    return $query->where('activite', '=', function($query) {
    $query->select('config.activite')
    ->from('activites_config AS config')
    ->where('config.slug', '=', 'ATRAIT');
    });
    }

    Cette méthode fonctionne et elle a l'avantage de ne générer qu'une seule requête.

    Est-ce que j'ai la possiblité de passer par l'intermédiaire d'un Modèle ?

Vous ne pouvez pas répondre à ce sujet.