Bonjour
Je travail actuellement sur un nouveau projet en Laravel. J'essaye de créer une table depuis ma console. j'ai donc créer le fichier de migration :

PS G:\WAMP\www\newProject> php artisan make:migration create_members_table

puis dans ce fichier j'ai créer les colonnes de ma table (j'ai un peu c/c la table users, celle que Laravel a à défaut):

<?php

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

class CreateMembersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->string('nom',50);
            $table->string('prenom',50);
            $table->string('pseudo',50);
            $table->string('email',150)->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password',150);
            $table->date('ddn');
            $table->integer('tel',10);
            $table->string('adresse',150);
            $table->integer('CP',5);
            $table->string('ville',100);
            $table->boolean('admin');
            $table->string('avatar',100);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('members');
    }
}

Mais après dans la console quand je tape "php artisan migrate" ça me sors une erreur ! Il créé bien les tables de Laravel, mais pas la mienne !

SQLSTATE[42000]: Syntax error or access violation: 1075 Un seul champ automatique est permis et il doit être indexé

De ce que j'ai lu sur le net c'est une erreur lié au faite qu'il ne peut y avoir qu'une seul colonne en auto-increment !! Or je ne vois pas ou j'ai pu en faire une deuxième !! Surtout que pas mal de colonne sont inspiré de la table "users_table" que Laravel créé à défaut et qui n'a pas ce souci là !! Donc c'est là ou je ne comprends pas :/ !! en faite ma table est quasi identique à la table users sauf que j'ai ajouté des colonnes qui reste assez basique pourtant !

D'ailleurs à ce propos, Laravel a 4 fichiers dans le dossier migrations à défaut(users/password_reset/failed_jobs/personal_access_token)... Sont il important ou peut on s'en débarrasser ? Ou ni l'un ni l'autre, il servent pas à grand chose mais gène en rien...

Merci

5 réponses


Hello,

Je peux répondre à la deuxième partie de question :

Les 4 fichiers que tu as cité sont un point de départ pour la réalisation d''un système d'authentification.
Tu es libre de les supprimer et de créer tes propres migrations.
Tu peux réecrire ton propre système d'authentification si tu le souhaites.

Maintenant, je te conseille de prendre un système d'authentification déjà existant. Rien ne sert de réinventer la roue.
Il en existe plusieurs, et ils se basent tous (si je ne dis pas de bêtise) sur ces fichiers de migrations que tu as cités.

Je te conseille de commencer avec Breeze si tu débutes. Cela te permettra de voir directement dans ton projet les routes et controllers permettant l'authentification de ton utilisateur.

Ensuite si tu aimerais implémenter tes propres views (login, register) sans te prendre (trop) la tête avec l'implémentation du code php tu as
Fortify:
Il te fournit clés en main un système d'authentification (excluant les pages blade) comprenant:

  • Inscription
  • Connexion (avec 2 facteurs d'authentifications si tu le souhaites)
  • Récupération de mot de passe
  • Vérification de mot de passe

Finalement, tu as Jetstream qui te permet une installation complète. (Il utilise Fortify entre autre pour mettre en place le système d'authentification)
Sache qu'il est fourni avec 2 "stacks" différentes:

  • Livewire + blade
  • Inertia + VueJs

Maintenant, le système de session de Laravel se base par défault sur la table 'users' et le model qui lui est lié App\Models\User. Tu peux encore une fois customisé le tout.

Il existe pas mal de tutos sur ces différents packages sur le net.
N'oublie pas que le but de ceux-ci sont de te faciliter la tâche et de lancer directement dans ton application sans te préoccuper de la mise en place de ton authentification.

Tous ces packages ne sont que des starters points pour démarrer ton application le plus rapidement possible.

Pour ce qui est de tes colonnes (tel, addresse...) rien ne t'empêche de créer une migration et de l'ajouter à ta table users.
C'est ce que je fais (et d'autres) très souvent.

Voilà si tu as d'autres questions n'hésite pas, j'essaierai (ou quelqu'un d'autre) de t'aider du mieux possible.

d3LTa7
Auteur

Ha super ! Merci beaucoup Adraknar pour m'avoir éclairé sur ce sujet et merci pour les conseils ! C'est vrai que je débute encore en Laravel et que je n'utilise pas encore trop d'extension mise à part le debug ! Je verrais plus tard ce que tu m'a conseillé, je prend note :) Mais je suis du genre step by step ! Du coup j'aimerais déjà résoudre mon premier souci et puis bien m'entrainer à faire les choses moi même et les comprendre avant d'utiliser des choses qui font tout à ma place sans que je comprenne quoi que ce soit !

Bref j'aimerais vraiment savoir pourquoi cette migration n'aboutie pas... :(

Bonjour de nouveau,

Pour la première partie de ton problème, c'est très simple en fait !

C'est au niveau de tes champs de type "integer".

Si tu regardes la méthode associée tu verras qu'elle n'accepte que ces 3 paramètres:

    public function integer($column, $autoIncrement = false, $unsigned = false)

Or tu essaies de lui passer un nombre en second paramètre.

Je pense savoir ce que tu as voulu faire, à savoir délimiter la taille de tes champs.
Si tu utilises mysql comme base de données, tu ne peux pas définir la "longeur limite" de ton champs.
Cependant Il existe plusieurs champs nombre pré-délimité selon tes besoins (cf: mysql_documentation)

Tu auras une méthode associé dans ton schéma.

Réecrit ta migration de la sorte si tu veux que ça marche.

<?php

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

class CreateMembersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->string('nom',50);
            $table->string('prenom',50);
            $table->string('pseudo',50);
            $table->string('email',150)->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password',150);
            $table->date('ddn');
            $table->integer('tel');
            $table->string('adresse',150);
            $table->integer('CP');
            $table->string('ville',100);
            $table->boolean('admin');
            $table->string('avatar',100);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('members');
    }
}

Si tu souhaites absolument qu'en base de données ton champs possède une limite alors essaie de tourner vers un varchar ou mieux un char.
(différence entre les deux)

Tu vérifieras également au niveau de ton controlleur (ou d'un form request) la validité de tes données avant insertion.
N'hésite pas à mettre ton sujet en résolu si c'est le cas, sinon à me relancer.

Cordialement,
Adrak'

d3LTa7
Auteur

Hummm ok je vois !! Merci :) Je comprend mieux !!

Bonjour,

Les échanges que vous avez faits sur ce sujet m'ont été d'une grande aide. Merci