Laravel 5

Problème de requête avec Eloquent

  • Avatar de RyanKeli
    Membre depuis :
    11/04/2017
    Messages :
    33

    Bonjour cher laravel,

    J'aimerais avoir de l'aide sur comment mieux faire les requêtes avec Eloquent suivant des relations que j'ai créé pour mieux me faire comprendre.
    J'ai 4 modèles : Entreprise, CreateEntreprise, ManageEntreprise et User.

    class Entreprise extends Model

    {
    protected $fillable = [
    'type', 'informations', 'user_id'
    ];

    protected $table = 'entreprises';

    public function user() {
    return $this->belongsTo(User::class);
    }

    public function create_entreprise() {
    return $this->hasOne(CreateEntreprise::class);
    }

    public function manage_entreprise() {
    return $this->hasMany(ManageEntreprise::class);
    }

    }

    class ManageEntreprise extends Model
    {
    protected $fillable = [
    'type_activite', 'informations', 'status', 'entreprise_id'
    ];

    protected $table = 'manage_entreprises';

    public function entreprise() {
    return $this->belongsTo(Entreprise::class);
    }

    public function user() {
    return $this->belongsTo(User::class);
    }

    }

    class CreateEntreprise extends Model
    {
    protected $fillable = [
    'informations', 'status', 'entreprise_id'
    ];

    protected $table = 'create_entreprises';

    public function entreprise() {
    return $this->belongsTo(Entreprise::class);
    }

    }

    class User extends Authenticatable
    {
    use Notifiable;

    protected $fillable = [
    'name', 'email', 'password',
    ];

    protected $hidden = [
    'password', 'remember_token',
    ];

    public function entreprise() {
    return $this->hasMany(Entreprise::class);
    }

    public function manage_entreprise() {
    return $this->hasManyThrough(ManageEntreprise::class, Entreprise::class);
    }

    }

    Ma première préoccupation est de savoir si les liaisons sont correcte plus particulièrement celle qui concerne les modèles ManageEntreprise et User.
    La seconde se trouve niveau des requêtes, si tout ce qui a été cité ci-dessus est correct :
    requête 1 : Lister les entreprises de l'utilisateur connecté
    requête 2 : Avoir les informations sur les entreprises créées ainsi que l'utilisateur qui a créé ces entreprises
    requête 3 : Avoir les informations sur les entreprises gérées ainsi que l'utilisateur qui a géré ces entreprises

    NB : le modèle Entreprise contient les informations générales sur l'entreprise,
    le modèle CreateEntreprise contient les informations de création d'entreprise,
    le modèle ManageEntreprise contient les informations de gestion d'entreprise.

    Je reste disponible si vous avez besoin de plus d'informations pour m'aider.

    Merci beacoup d'avance.
    Cordialement.
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2285

    Salut,

    Ca fait beaucoup de questions ça...

    Avec les informations fournies les relations semblent correctes à part le belongsTo User dans le modèle ManageEntreprise. Il n'y a pas de réciproque simple à hasManyThrough. Il faut chaîner les deux belongsTo.

    Pour les hasMany autant mettre un "s" pour le nom de la fonction.

    Pour récupérer les entreprises de l'utilisateur connecté :

    $entreprises = auth()->user()->entreprise()->get();

    Pour les informations sur les entreprises créées ainsi que l'utilisateur qui a créé ces entreprises :

    $entreprises = Entreprise::with('user', 'create_entreprise')->all();

    Pour les informations sur les entreprises gérées ainsi que l'utilisateur qui a géré ces entreprises là je comprends pas trop ce qui est recherché...

  • Avatar de RyanKeli
    Membre depuis :
    11/04/2017
    Messages :
    33

    Bonjour M. Bestmomo, merci pour votre reponse.
    S'il vous plait, pouvez vous me montrer comment il faut chainer deux belongsTo dans mon exemple.

    En fait, comme je l'ai dit dans le NB de mon premier message, les modèles CreateEntreprise et ManageEntreprise sont tous les deux liés au modèle Entreprise.

    Toutes les entreprises sont enrégistrées dans le modèle Entreprise et les autres informations concernant la création ou la gestion de l'entreprise sont dans le modèle CreateEntreprise ou le modèle ManageEntreprise suivant le cas d'une création ou d'une gestion d'entreprise.

    Dans le modèle ManageEntreprise, nous avons les informations qui concernent seulement de la gestion d'entreprise alors que le modèle CreateEtreprise contient les informations de la création d'entreprise.
    Alors les entreprises gérées sont les entreprises qui ont leurs informations dans les modèles Entreprise et ManageEntreprise

    J'espère avoir été plus explicite sur les informations des entreprises gérées sachant qu'une entreprise peut être gérée sans être créée au préalable.

    veuillez m'excuser pour les détails mais j'aimerais mieux me faire comprendre.

    Merci beaucoup d'avance pour vos reponses et votre attention.

    Cordialement

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2285

    De toute façon les requêtes vont partir soir de User soit D'Entreprise.

    A partir d'Entreprise on peut tout récupérer :

    $entreprises = Entreprise::with('user', 'create_entreprise','manage_entreprise')->get();
  • Avatar de RyanKeli
    Membre depuis :
    11/04/2017
    Messages :
    33

    Merci M. Bestmomo.
    S'il vous plait, maintenant comment pourrait on chainer deux belongsTo dans une relation hasManyThrough.

    Merci pour vos reponses et votre disponibilité.

  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    2285

    Salut,

    A priori le chaînage est inutile là mais pour le principe on fait :

    $manageentrprises = ManageEntreprise::with('entreprise.user')->get();
  • Avatar de RyanKeli
    Membre depuis :
    11/04/2017
    Messages :
    33

    Merci M. Maurice Chavelli dit Bestmomo.

Vous ne pouvez pas répondre à ce sujet.