Projets Laravel France

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

Avatar de BarnabéTebda
BarnabéTebda

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.

Posté il y a 1 an
Avatar de bestmomo
bestmomo

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.

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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.

Posté il y a 1 an
Avatar de bestmomo
bestmomo

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

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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)

Posté il y a 1 an
Avatar de bestmomo
bestmomo

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 ?

Posté il y a 1 an
Avatar de BarnabéTebda
BarnabéTebda

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.

Posté il y a 1 an

Vous ne pouvez pas répondre à ce sujet.