Laravel 5

Créer une relation n:n qui fait comme dans workbench

  • Avatar de thx_xth
    Membre depuis :
    09/02/2018
    Messages :
    4

    Bonjour,

    je viens vers vous pour un problème qui concerne la création d'une table de relation n:n le titre n'est pas très explicite mais je vais essayé d'expliquer le mieux possible.

    En fait quand sous workbench je crée une relation n:n et ensuite quand je l'importe dans phpMyAdmin j'ai cette configuration là : ![http://www.casimages.com/img.php?i=18020910030116459915547679.png].
    Et dans la structure de la table de relation recette, j'ai cela : ![(http://www.casimages.com/img.php?i=18020910130716459915547683.png)]

    On voit ici que workbench crée pour les 2 champs une clé étrangère et une clé primaire.
    Je n'ai réussi avec les migrations de laravel à ne faire qu'un champs avec une clé primaire et étrangère l'autre champ il y a qu'une clé étrangère.

    De plus sur la photo ci-dessous workbench fait en sorte que quand le pointeur de ma souris est sur le 1 du champ Boisson_codeBoisson (bien sûr sa le fait pour l'autre champ) il y a une bulle info qui s'affiche et me dit à quoi correspond le 1 de plus si je clique sur le 1 il me renvoi sur la ligne à qui appartient le l'id.

    ![(http://www.casimages.com/img.php?i=18020910440716459915547702.png)]

    Donc je voulais savoir si en faisant ma migrations pour ma table relationnel je pourrai avoir la même chose que workbench c'est à dire avoir pour mes 2 champs et par champ 2 clés une étrangère et l'autre primaire et que quand je passe ma souris sur un champ id de ma table relationnel je puisse avoir en info bulle à quoi se réfère l'index et de pouvoir cliqué dessus pour me renvoyé à la ligne concerné.

    Je ne vois pas comment faire avec laravel pour y arrivé. Si quelqu'un serai la manipe ou le code à faire ce serai super.

    Je vous remerci par avance.

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

    Salut,

    C'est pas très clair tes deux tables pivots. Mais globalement si le but est d'obtenir des migrations à partir de la construction d'un schéma relationnel je te conseille d'utiliser Laravel Schema Designer. Tu auras la génération automatique des migrations avec le nommage conventionnel d'Eloquent pour simplifier le codage, et bien d'autres choses en prime.

    Rien ne t'empêchera ensuite d'importer dans workbench ou dbForge ou tout autre gestionnaire MySQL pour accomplir d'autres tâches.

  • Avatar de thx_xth
    Membre depuis :
    09/02/2018
    Messages :
    4

    ok merci pour ton aide oui je pense mettre mal expliquer mais sur tout les tuto que j'ai vu pour la création d'un migration n:n et bien impossible en créant le code de pouvoir ensuite quand on à fait php artisan migrate de pouvoir cliquer sur les index de la table de relation n:n ce que workbench fait. Mais bon tant pis c'est pas grave. Je te remercie pour ton aide je vais cherché du coté de laravel schema designer. Merci pour le lien.

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

    Salut,

    A partir du moment où une clé étrangère est définie on a la bulle au survol dans PHPMyAdmin et un lien vers l'enregistrement concerné. Donc une table pivot créée par une migration avec les clés étrangères définies auront forcement cette fonctionnalité.

  • Avatar de thx_xth
    Membre depuis :
    09/02/2018
    Messages :
    4

    Bin en fait chez moi, non, je te montre mon code de ma table de relation :
    Ha oui j'oubliais les images que je t'ai montré de ma base on été fait avec workbench

    Ce code si fait partie d'un projet laravel qui n'a rien a voir avec les images que je t'ai montré.
    Et donc tout à été fait avec les migrations sauf la base que j'ai fait à la main dans phpMyAdmin.

    <?php

    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;

    class CreateDrinkIngredientTable extends Migration
    {
    /
    Run the migrations.

    @return void
    /
    public function up()
    {
    Schema::create('drink_ingredient', function (Blueprint $table) {
    $table->integer('drink_id'); //La clé de ma table drinks
    $table->integer('ingredient_id'); //La clé de ma table ingredients

    $table->integer('qtyIng');

    $table->primary(['drink_id', 'ingredient_id']); //Je met 2 clé primaire mais qu'une sur 2 accepté

    $table->foreign('drink_id')
    ->references('id')->on('drinks')
    ->onDelete('cascade');

    $table->foreign('ingredient_id')
    ->references('id')->on('ingredients')
    ->onDelete('cascade');
    });
    }

    /

    Reverse the migrations.

    @return void
    /
    public function down()
    {
    Schema::dropIfExists('drink_ingredient');
    }
    }
  • Avatar de bestmomo
    Membre depuis :
    07/04/2013
    Messages :
    1998

    Pour être en cohérence avec Eloquent il faudrait :

    public function up()
    {
    Schema::create('drink_ingredient', function(Blueprint $table) {
    $table->increments('id');
    $table->timestamps();
    $table->integer('drink_id')->unsigned();
    $table->integer('ingredient_id')->unsigned();
    ...
    // Clés étrangères
    });
    }
  • Avatar de thx_xth
    Membre depuis :
    09/02/2018
    Messages :
    4

    ok merci pour ton aide

Vous ne pouvez pas répondre à ce sujet.