Laravel 5

Besoin d'aide pour une relation

  • Avatar de Robthan
    Membre depuis :
    21/02/2016
    Messages :
    39

    Bonjour les Laravelers,
    Je recontre un petit soucis avec une relation et une migration que je ne comprend pas... J'ai un système de candidature où des nouveaux utilisateurs peuvent s'incrire pour rentrer dans une communauté. Une fois la candidature postée, les membres de la communauté peuvent voter pour ou contre l'intégration du nouveau membre.

    Pour ce faire j'ai donc 3 modèle :

    • Application (table avec la candidature)
    • User (système d'Auth de Laravel)
    • Vote (La table contenant les votes)

    Du coup :

    • Une application peut avoir plusieurs votes mais d'un auteur unique.

    J'ai donc fait ceci au niveau des migrations :

    public function up()
    {
    Schema::create('votes', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('application_id');
    $table->unsignedInteger('user_id');
    $table->boolean('vote');
    $table->timestamps();
    });
    }

    Avec ceci dans le modèle Application :

    public function users() {
    return $this->belongsTo('App\Models\User');
    }

    public function votes() {
    return $this->hasMany('App\Models\Vote');
    }

    Dans le modèle User :

    public function application() {
    return $this->hasOne('App\Models\Application');
    }

    public function votes() {
    return $this->hasMany('App\Models\Vote');
    }

    Et enfin dans le modèle Vote :

    public function user() {
    return $this->belongsTo('App\Models\User');
    }

    public function application() {
    return $this->belongsTo('App\Models\Application');
    }

    Pour ma table votes, j'ai donc créé cette migration :

    public function up()
    {
    Schema::create('votes', function (Blueprint $table) {
    $table->increments('id');
    $table->unsignedInteger('application_id');
    $table->unsignedInteger('user_id');
    $table->boolean('vote');
    $table->timestamps();
    });
    }

    Et une seconde migration pour les relations :

    public function up()
    {
    Schema::table('votes', function (Blueprint $table) {
    $table->foreign('user_id')->references('id')->on('users');
    $table->foreign('application_id')->references('id')->on('applications');
    });

    }

    La première migration ne pose pas de problèmes, mais la seconde par contre coince avec cette erreur :

    SQLSTATE[HY000]: General error: 1005 Can't create table blablabla.#sql-d28_60 (errno: 150 "Foreign key constraint is incorrectly formed")

    Est-ce que j'ai manqué quelque chose ? Ma table applications et users me semblent correcte et je ne vois pas ce qui coince. Je ne pense pas que je dois créer une colonne vote_id dans applications ça me semblerait étrange non ? Merci pour votre aide, ça fait un petit moment que je coince et à mon avis il y a une logique que je n'ai pas comprise...

  • Avatar de lavarelkyi
    Membre depuis :
    20/12/2017
    Messages :
    85

    Salut,

    Essaie de creer la migration dapplications avant celle de votes pour voir ce que cela donne...

  • Avatar de Robthan
    Membre depuis :
    21/02/2016
    Messages :
    39

    Hello, il faut forcément une migration de la table applications pour que ça marche ? C'est un projet récupéré et les table users et applications existent déjà dans ma base de données. De plus, je n'ai pas les migrations pour ces 2 tables dans le dossier, juste les 2 nouvelles (voir premier message).

  • Avatar de lavarelkyi
    Membre depuis :
    20/12/2017
    Messages :
    85

    Salut Robthan,

    Alors pour ce qui est du fait que tu dois forcement creer une migration de la table applications, je ne saurai vraiment te le dire avec certitude compte tenu du faite que moi meme je suis novice comme toi en se qui concerne le developpement avec laravel.
    La personne la plus appropriée à repondre à cela est surement BestMomo.

    Mais je sais une chose si laravel ne detecte pas ta table applications c'est sur qu'il va te renvoyé une erreur de ce genre.

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

    Salut, il faudrait vérifier la concordance des types entre la clé étrangère et la clé d'origine.

  • Avatar de Robthan
    Membre depuis :
    21/02/2016
    Messages :
    39

    Bonsoir à tous :)
    Désolé pour le délais, je n'ai pas eu le temps de continuer le projet depuis quelques jours...
    Quand tu parles des types, c'est bien au niveau de la structure ? De ce côté là, tout me semble bon...

    Table applications, colonne ID : https://i.postimg.cc/yNsXKR9B/application-id.jpg
    Table users, colonne ID : https://i.postimg.cc/RFqtCL0r/user-id.jpg
    Table votes : https://i.postimg.cc/XY0zzQjY/table-vote.jpg

Vous ne pouvez pas répondre à ce sujet.