1
votes

Clé primaire et clé étrangère sur Laravel

Je sais que ces questions sont déjà posées mais je suis coincé ... J'ai 2 tables (clubs et membres):

Dans ma table clubs j'ai 3 champs id_club, name_club, type_sport_club

Tout fonctionne sur ma table Clubs p >

Cependant je suis coincé dans mon tableau Membres , je ne comprends pas ...

Mon problème est que je n'obtiens que le numéro de mon fk et pas le nom de club... entrez la description de l'image ici

Pour information, j'ai 3 champs id_membre, name_membre, fk_club

Alors ... Dans ma base de données j'ai ceci p >

@foreach($membres as $membre)
                <tr>
                   <td> {{$membre->name_membre}}</td>
                   <td> {{$membre->fk_club}}</td>
                   <td>
                     <form method="POST" action="{{ route('membres.destroy', $membre) }} ">
                    <a class="btn btn-sm btn-warning" href="{{route('membres.edit',$membre->id_membre)}}">Editer</a>
                    @csrf
                    @method('DELETE')
                    <button type="submit" class="btn btn-sm btn-danger">Deleter</button>
                    </form>
                    </td>
                </tr>
                @endforeach

Puis sur le modèle j'ai ceci

public function index()
     {
         $membres = Membre::oldest()->paginate(5);
         return view('admin.membres.index', compact('membres'))
                   ->with('i', (request()->input('page', 1)-1)*5);
     }

Après pour le contrôleur j'ai ceci

class Membre extends Model
{
    //
    protected  $fillable = ['name_membre', 'fk_club'];
}


1 commentaires

C'est ainsi que fonctionnent fondamentalement les relations SQL. La clé étrangère fournit une spécification sur quelle table vous devez joindre et sur quel champ afin d'obtenir toutes les données liées à une ligne donnée. Si vous aviez le nom du club sur chaque membre de ce club, il y aurait trop de duplication et d'autres choses merveilleuses telles que la mise à jour et la suppression des anomalies. @Alex a suggéré d'utiliser des relations éloquentes et je pense que c'est certainement quelque chose que vous devez examiner, mais vous devrez peut-être d'abord examiner les bases des bases de données relationnelles.


3 Réponses :


1
votes

Tout d'abord, votre clé étrangère dans la migration des membres fait référence à id_client dans la table clients , vous voudrez probablement qu'elle fasse référence à id_club dans la table clubs (sauf si votre table s'appelle réellement clients).

Ensuite, pour obtenir le nom du club auquel appartient un membre, vous devrez ajouter une fonction appelée club à votre modèle Membre , qui renvoie quelque chose comme < code> $ this-> appartient à ('App \ Club'); . Si vous ne l'avez pas fait, vous devez également ajouter une fonction membres à votre modèle Club , qui renvoie quelque chose comme $ this-> hasMany ('App \ Membre '); .

Dans votre vue, vous pouvez accéder au nom du club avec $ membre-> club-> name_club .

Voici un lien vers la documentation Laravel sur les relations Eloquent, peut-être qui aide à clarifier les choses se passent.


0 commentaires

1
votes

Vous devez définir votre relation,

<td> {{$membre->club->name_club}}</td> 

Vous pouvez maintenant l'utiliser comme ci-dessous,

class Membre extends Model
{
    //
    protected  $fillable = ['name_membre', 'fk_club'];

    public function club()
    {
       return $this->belongsTo('App\Club', 'fk_club');
    }
}


0 commentaires

1
votes

Sur votre modèle Membre Ajoutez ceci

class Club extends Model{
  public function membre(){
    return $this->hasMany('App\Membre', 'fk_club','id_club');
  }

}

Vous pouvez obtenir ces données sur votre fichier de vue en

XXX

Et votre modèle de club ajoute ceci

<td> {{$membre->club->name_club}}</td> 

}


0 commentaires