Besoin d'aide ?

Problème de connexion sur plusieurs ID

  • Avatar de Soufiane1
    Membre depuis :
    09/03/2019
    Messages :
    19

    Bonjour,

    J'ai besoin de votre aide concernant un petit soucis que je ne parviens pas à résoudre.

    Dans mon pannel, j'ai deux type de rôles: admin et former.

    Actuellement, j'ai 3 utilisateurs dans mon application.

    • le premier rôle est l'admin, le pseudo est aussi admin et l'adresse email est admin@gmail.com
    • le second rôe est un former , il a comme pseudo Remace et l'adresse email est test@gmail.com
    • le troisième user est toujours un former , il a comme pseudo Gofette et l'adresse email est ledeluge1990@gmail.com.

    Pour information, l'admin est le seul à pouvoir créer des enregistrements...

    Ici, j'ai deux enregistements (il s'agit des infos personnelles de chaque former)

    Maintenant, mon objectif est que chaque former (utilisateur) puisse consulter ses informations personnelles.

    Lorsque, je me connecte avec les identifiants du pseduo Remace (email adresse test@gmail.com)

    J'aperçois ceci:

    En fait, je récupère les renseignements de Gofette et non ceux de Remace, c'est assez embêtant...

    Maintenant, si je veux me connecter avec le user Gofette (email adresse ledeluge1990@gmail.com)

    Rien ne s'affiche...

    Mon problème doit être au niveau de ma fonction index() ???

    public function index()
    {

    if($has_role = auth()->user()->hasRole('admin')){
    $garages = Garage::oldest()->paginate(5);
    return view('admin.garages.index', compact('garages'));
    } else{
    $garages = Garage::where('id', Auth::user()->id)->paginate(5);
    return view('admin.garages.index', compact('garages'));
    }

    }

    Je pense que le problème est dans cette ligne ?

    $garages = Garage::where('id', Auth::user()->id)->paginate(5);

    Voici comment sont définis mes models:

    Model User


    public function garage()
    {
    return $this->hasOne('App\Garage', 'id', 'id');
    }

    Model Garage

    class Garage extends Model
    {
    //
    protected $fillable = ['user_id', 'nom', 'adresse', 'fk_localite', 'telephone', 'email'];

    public function localites(){

    return $this->belongsTo('App\Localite' , 'fk_localite');
    }

    public function user()
    {
    return $this->belongsTo('App\User', 'id', 'id');
    }

    }

    Je vous remercie pour votre aide.

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

    Salut

    Ca serait pas plutôt un truc de ce genre ?

    $garages = auth()->user()->garage()->get();

    Mais en fait il y aura un seul résultat ?

  • Avatar de Soufiane1
    Membre depuis :
    09/03/2019
    Messages :
    19

    Bonsoir,

    Merci pour ton aide.

    Alors, j'ai testé ta ligne de code et lorsque je veux me connecter avec le premir utilisateur, je n'aperçois pas ces informations personnelles.
    Par contre, lorsque je me connecte chez l'administrateur je les aperçois bien.

    J'ai fait un dd() dans ma function index()

    public function index()
    {

    if($has_role = auth()->user()->hasRole('admin')){
    $garages = Garage::oldest()->paginate(5);
    return view('admin.garages.index', compact('garages'));
    } else{
    $garages = auth()->user()->garage()->get();
    dd(auth()->user()->garage());
    return view('admin.garages.index', compact('garages'));
    }
    }

    J'ai ceci qui m'est affiché:

    HasOne {#387 ▼
    #foreignKey: "garages.user_id"
    #localKey: "id"
    #query: Builder {#417 ▶}
    #parent: User {#373 ▶}
    #related: Garage {#394 ▶}
    #withDefault: null
    }

    Je pense que mon réel problème est au niveau de ma relation garage et user ? Faut-il peut-être aussi inclure l'administrateur? Etant donné, que c'est lui qui ajoute les enregistrements.

    Concernant ta question je me suis posé la même question, je dois peut-être avoir fichiers blades garage(s)? Un pour l'admin et l'autre pour le former ?

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

    Ah oui il doit y avoir un souci dans les clés déclarées, puisqu'elles semblent conventionnelles autant ne pas les mettre :

    public function garage()
    {
    return $this->hasOne('App\Garage');
    }
  • Avatar de Soufiane1
    Membre depuis :
    09/03/2019
    Messages :
    19

    J'ai bien fait comme toi et je n'aperçois pas les infos de mes formateurs lorsque j'essaye de me loger, par contre pour l'admin nickel, il peut consulter les infos personnelles des formers.

    Je pense que mon problème est dans ma function index() après le else

    public function index()
    {

    if($has_role = auth()->user()->hasRole('admin')){

    $garages = Garage::oldest()->paginate(5);

    return view('admin.garages.index', compact('garages'));

    } else{

    $garages = auth()->user()->garage()->get();
    return view('admin.garages.index', compact('garages'));

    }
    }

    Si tu as encore une idée, n'hésite pas....

  • Avatar de Soufiane1
    Membre depuis :
    09/03/2019
    Messages :
    19

    Bonjour,

    J'ai trouvé la solution, je vous là dépose ici:

    Dans la table garages j'ai ceci:

    public function up()
    {
    Schema::create('garages', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id')->unsigned()->nullable();
    $table->foreign('user_id')->references('id')->on('users');
    $table->string('nom', 25);
    etc..

    Dans mon model Garage j'ai ceci:

    class Garage extends Model

    {

    //

    protected $fillable = ['user_id', 'nom', 'adresse', 'fk_localite', 'telephone', 'email'];

    public function user()

    {

    return $this->belongsTo('App\User', 'id', 'user_id');

    }

    }

    Dans mon model User j'ai ceci

    public function garages()

    {

    return $this->hasOne('App\Garage', 'user_id', 'id');

    }

    Voici ma function index()

    public function index()
    {

    if($has_role = auth()->user()->hasRole('admin')){
    $garages = Garage::oldest()->paginate(5);
    return view('admin.garages.index', compact('garages'));
    } else{
    $garages = Garage::where('email', Auth::user()->email)->paginate(5);
    return view('admin.garages.index', compact('garages'));
    }

    }

    Je récupère le tout à l'aide de l'adresse email de l'user, je pourrais aussi retirer la paginaion(5).

    Voilà, si ça peut aider un débutant comme moi.

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

    Ce n'est pas très orthodoxe parce que tu crées une relation que tu n'utilises pas pour aller chercher tes enregistrements.

    Avec la relation ça donne ça :

    $garages = Auth::user()->garages()->paginate(5);

Vous ne pouvez pas répondre à ce sujet.