IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Laravel PHP Discussion :

erreur quand je veux migrer avec des clés étrangeres


Sujet :

Laravel PHP

  1. #1
    Membre régulier Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 94
    Points : 88
    Points
    88
    Par défaut erreur quand je veux migrer avec des clés étrangeres
    Bonjour,

    je suis actuellement un cours laravel et je rencontre une erreur quant j'essaye de reproduire un exemple.

    j'ai deux class dans le dossier migration qui sont ainsi

    pour la tables companies

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
     
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
     
    class CreateCompaniesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         * 
         */
        public function up()
        {
            Schema::create('companies', function (Blueprint $table) {
                $table->engine = 'InnoDB';
     
                $table->increments('id')->unsigned;
                $table->string('name')->index();
                $table->timestamps();
            });
        }
     
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('companies');
        }
    }
    et pour la table addresses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?php
     
    use Illuminate\Support\Facades\Schema;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;
     
    class CreateAddressesTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('addresses', function (Blueprint $table) {
                $table->engine = 'InnoDB';
     
                $table->increments('id')->unsigned;
                $table->string('address')->index();  
                $table->string('city')->index();  
                $table->string('zipcode')->index();  
                $table->string('country')->index();  
     
                $table->integer('company_id')->unsigned;  
                $table->foreign('company_id')  
                    ->references('id')  
                    ->on('companies');
                $table->timestamps();
            });
        }
     
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('addresses');
        }
    }
    quant j’exécute la commande php artisan migrate j'ai ce message d'erreur

    1 PDOException::("SQLSTATE[HY000]: General error: 1215 Impossible d'ajouter des contraintes d'index externe")
    D:\wamp64\www\monsite\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458

    2 PDOStatement::execute()
    D:\wamp64\www\monsite\vendor\laravel\framework\src\Illuminate\Database\Connection.php:458
    mes tables sont en innodb et les colonnes en relation me semble du même type et même caractéristique.

    merci pour l'aide

  2. #2
    Membre régulier Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 94
    Points : 88
    Points
    88
    Par défaut
    je remarque que bien que que je mette ceci dans le script , pour avoir le même type d'integer unsigned

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $table->integer('company_id')->unsigned;  
                $table->foreign('company_id')  
                    ->references('id')  
                    ->on('companies');
    quant je regarde dans phpmyadmin la colonne company_id n'est pas "unsigned".

    comme la clé étrangère doit être de même type que sa référence ça joue peut être.
    mais comment forcer laravel à faire ce qu'on lui demande de faire , c'est à dire à ce que la colonne company_id
    soit bien "unsigned comme on le déclare dans le script.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 56
    Points : 38
    Points
    38
    Par défaut
    Salut, ton serveur de base de données accepte et gère les clés étrangères ?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Attention ceci n'est pas correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $table->integer('company_id')->unsigned;
    Il faudrait plutôt utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $table->integer('company_id')->unsigned();
    // ou
    $table->unsignedInteger('company_id');

  5. #5
    Membre régulier Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 94
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par Kontas Voir le message
    Salut, ton serveur de base de données accepte et gère les clés étrangères ?
    merci pour la réponse. Oui les tables sont en innodb (mysql) quant je le fais directement dans phpmyadmin la clé est bien ajouté. Je vais re tester le tout demain et je posterais le resultat.

  6. #6
    Membre régulier Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 94
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par ouhare Voir le message
    Attention ceci n'est pas correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $table->integer('company_id')->unsigned;
    Il faudrait plutôt utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $table->integer('company_id')->unsigned();
    // ou
    $table->unsignedInteger('company_id');
    merci,
    je regarde ça demain et je posterais le résultat

    cordialement.

  7. #7
    Membre régulier Avatar de Zembla
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2018
    Messages : 94
    Points : 88
    Points
    88
    Par défaut
    merci ouhare , l’erreur venait que les colonnes mises en relation n’était pas du même type et j'ai rajouté un index


    en remplaçant ( dans la méthode up() de la table adresses )

    ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $table->integer(’company_id’)->unsigned;
    par ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $table->unsignedInteger('company_id')->index()
    cela fonctionne après un refresh, la relation se fait dans les tables.

    encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Authentification avec des clés privée/publique
    Par relena93 dans le forum Web & réseau
    Réponses: 10
    Dernier message: 03/03/2008, 14h19
  2. Réponses: 2
    Dernier message: 02/02/2008, 19h04
  3. Réponses: 5
    Dernier message: 12/03/2007, 10h21
  4. Réponses: 3
    Dernier message: 10/12/2005, 19h56
  5. pb avec des clés sur un formulaire
    Par marie253 dans le forum Bases de données
    Réponses: 7
    Dernier message: 17/06/2004, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo