Bonjour,

Je suis présentement entrain de me créer une API pour un "card game" qui ne partage pas son API publiquement. Donc, pour ceux qui ne le savent pas déjà, une carte dans un "card game" peut se faire imprimer une ou plusieurs fois.
À chaque ré-impression, il peut y avoir quelques informations différentes comme par exemple : la rareté; le "set"; et le numéro de la carte.

Ce que je fais

Donc, j'ai une table composé de 3 foreign keys.
Maintenant, j'aimerais être en mesure d'utiliser la fonction "attach()" qui est proposé par Laravel pour me simplifier la vie et ne pas créer de Model supplémentaire. Mon problème, c'est que je ne comprends pas bien les "pivot tables" et comment ça fonctionne lorsque l'on a plus de 2 foreign keys dans la table.

** Voici le code pour la création de la table.

Schema::create('cards_sets_rarities', function (Blueprint $table) {
            $table->increments('id');
            $table->unsignedInteger('card_id');
            $table->unsignedInteger('set_id');
            $table->unsignedInteger('rarity_id');
            $table->string('number');
            $table->timestamps();

            $table->foreign(['card_id', 'set_id', 'rarity_id'])->references(['id', 'id', 'id'])->on(['card', 'set', 'rarity']);
        });

Model ****card.php

public function rarities() {
        return $this->belongsToMany(Rarity::class);
    }

    public function sets() {
        return $this->belongsToMany(Set::class);
    }

Model ****set.php

    public function cards() {
        return $this->belongsToMany(Card::class);
    }

    public function rarities() {
        return $this->belongsToMany(Rarity::class);
    }

Model ****rarity.php

    public function cards() {
        return $this->belongsToMany(Card::class);
    }

    public function sets() {
        return $this->belongsToMany(Set::class);
    }

Ce que je veux

J'aimerais de l'aide pour comprendre comment faire en sorte que mon pivot table fonctionne avec 3 foreign keys.

Merci!

2 réponses


Azorgh
Réponse acceptée

Salut,

La table de pivot va te permettre de lier l'id de ton card à ta rarity par exemple.
card_id : 1 / rarity_id : 1

Donc par exemple tu peux faire dans ton controller :

<?php

public function save(){
    $card = Card::find(1);
    $rarity = Rarity::find(1);

    $card->rarities->attach($rarity);
}

Quand tu appeleras

<?php

dd($card->rarities);

Tu obtiendras la liste en base de la table rarities, lié à ton ta card.

Dans tous les cas, tu peux aller sur la doc de Laravel qui donne de vrais exemples concret :)

Merci pour ta réponse @Azorgh. J'ai trouvé une autre façon de faire un peu crochu mais bon...