Projets Laravel France

Erreur d'insertion de clé etrangère dans une vue

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    Salut à tous. Je suis en train de gerer l'insertion dans une base de données, pour les tables contenant pasdeclé étrangère, cela fonctionne sans problème, le probleme se trouve au niveau des tables contenant les clés etrangères. Si quelqu'un a une idée pour la resolution de mon probleme, je suis preneur. Merci d'avance.

    Migration de la table users

    Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
    })

    Migration de la table appelapropositions

    Schema::create('appelapropositions', function (Blueprint $table) {
    $table->increments('id');
    $table->string('themePrioritaireRecherche');
    $table->double('montantFinancement');
    $table->date('dateDebutSoumissionNoteSuccinte');
    $table->date('dateFinSoumissionNoteSuccinte');
    $table->date('dateDebutSoumissionNoteDetaillee');
    $table->date('dateFinSoumissionNoteDetaillee');
    $table->timestamps();

    });

    Migration de la table projets contenant l'id des tables appelapropositions et users

    Schema::create('projets', function (Blueprint $table) {
    $table->increments('id');
    $table->string('titreProjet');
    $table->string('motCleProjet');
    $table->double('montantDemande');
    $table->text('resumeProjet');
    $table->string('dureeProjet');
    $table->timestamps();
    $table->integer('idAppel')->unsigned();
    $table->integer('idUser')->unsigned();
    });

    Fonction store() de controller de la table projets
    public function store(Request $request)
    {
    $this->validate($request, [
    'titreProjet' => 'required|min:10',
    'motCleProjet' => 'required|min:5',
    'montantDemande' => 'required',
    'resumeProjet' => 'required|min:10',
    'dureeProjet' => 'required',

    ]);
    Projet::create([
    'titreProjet' => $request->titreProjet,
    'motCleProjet' => $request->motCleProjet,
    'montantDemande' => $request->montantDemande,
    'resumeProjet' => $request->resumeProjet,
    'dureeProjet' => $request->dureeProjet,

    ]);
    return redirect()->route('home');
    }

    Modele de classe projets

    class Projet extends Model

    {

    public $table = 'projets';

    public $fillable = [
    'idAppel',
    'titreProjet',
    'motCleProjet',
    'montantDemande',
    'resumeProjet',
    'dureeProjet'
    ];
    public function user()
    {
    return $this->belongsTo(User::class);
    }
    public function appelaproposition()
    {
    return $this->belongsTo(Appelaproposition::class);
    }

    }

    Modele pour la table appelapropositions

    class Appelaproposition extends Model

    {
    public $table = 'appelapropositions';

    public $fillable = [
    'themePrioritaireRecherche',
    'montantFinancement',
    'dateDebutSoumissionNoteSuccinte',
    'dateFinSoumissionNoteSuccinte',
    'dateDebutSoumissionNoteDetaillee',
    'dateFinSoumissionNoteDetaillee'
    ];

    public function projets()
    {
    return $this->hasMany(Projet::class);
    }

    }

    Maintenant le code pour la recuperation des cles etrangeres la, vraiment, aucune idée

    Merci davance.

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

    En fait tu as aussi une relation de type Many to Many avec la table projets en pivot. Il y a donc deux façons d'envisager les relations. Il faudrait sans doute que tu lises bien la documentation sur le sujet.

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    Au fait, ce sont deux classes qui relient la table projets.
    Comme regle de gestion nous avons:

    -Un utilisateur peut enregister un ou plusieurs projet (s)
    -Un appel à proposition concerne un ou plusieurs projet(s)
    La clé primaire id de la table appelapropositions devient la clé etrangère idAppel de la table projets
    La clé primaire id de la table utilisateurs devient la clé etrangère idUser de la table projets.
    Personnellement, je vois pas de table pivot dans ces relationsla.

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

    C'est pourtant exactement la définition d'une table pivot pour projets :)

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    Si vous pouvez bien m'expliquer votre point de vue, pour que je puisse voir clairement les choses, puisque jusque là, j'ai du mal à vous suivre. Après avoir lu la documentation, si j'ai bien compris, la table pivot nintervient que dans une relation n:n. Par exemple si on a deux tables qui sont liées par une relation n:n, on aura une troisième table qui est la table pivot et qui contient les clés etrangères issues des clés primaires des deux tables en question. Or dans mon cas, jai 3 tables, vec des relations 1:n vers la table projets. Je sais si suis sur la bonne voie. En plus de l documentation, je suis inspiré sur ces 2 liens en dessous, notamment de du lien (1) pour ces 3 tables la

    Merci d'avance pour vos efforts.

    https://laravel.sillo.org/cours-laravel-5-5-les-donnees-la-relation-1n/ (1)
    https://laravel.sillo.org/cours-laravel-5-5-les-donnees-la-relation-nn/ (2)

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

    En fait les deux approches sont correctes : deux relations de type 1:n ou une relation de type n:n. Tout dépend des requêtes qui seront à effectuer sur les données, selon les cas une conviendra mieux que l'autre. Mais de toute façon les deux peuvent coexister sans problème.

    La question en fait est : quelles sont les requêtes qui vont être créées ?

  • Avatar de BarnabéTebda
    Membre depuis :
    18/10/2018
    Messages :
    45

    Desolé du retard. Pour les requêtes, j'avais pasy pensé, je suis debutant en laravel. Je faisais des recherches sur cela.
    Je vous explique le principe. Il s'agit du lancement, des projets, l'dministrateur va publier les appels à proposition, les utilisateurs, connecté ou pas devront voir les appels à proposition, c'est en voulant soumettre aux appels maintenant qu'ils doivent se connecter et selectionner l'appel auquel ils soyuhaiteront soumettrent, a la fin de la soumission, lors de la phase d'evaluation, on doit savoir tel projet appartient à tel utilisateur, donc une requete comme SELECT titreProjet FROM projets WHERE id=projets_id;
    Pour repondre à la question, je crois que c'est une sur toute la table appelapropositions qui chargera d'afficher les appels publiés.
    donc SELECT * FROM appelapropositions.
    Je sais pas si je suis sur la bonne voie.

Vous ne pouvez pas répondre à ce sujet.