Besoin d'aide ?

relation one to many

Avatar de MM
MM

Bonjour j'ai créée une relation one to many " une entreprise a plusieurs salarié " et j'ai créée un formulaire pour ajouter des salarié à l'entreprise , mais au moment de la validation j'ai ce message d'erreur :

SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: salaries.entreprise_id (SQL: insert into "salaries" ("nom", "prenom", "identifiant", "email", "mot_de_passe", "adresse", "codePostal", "ville", "dateAnniversaire", "updated_at", "created_at")

ma table salariés :

Schema::create('salaries', function (Blueprint $table)

{ $table->increments('id'); 
$table->string('nom'); 
$table->string('prenom'); 
$table->string('identifiant');
$table->string('email')->unique(); 
$table->string('mot_de_passe');
$table->string('adresse');
$table->string('ville');
$table->string('codePostal'); 
$table->string('dateAnniversaire');
$table->integer('entreprise_id')->unsigned();
$table->timestamps(); 
$table->foreign('entreprise_id')->references('id')->on('entreprises'); }); }

mes relations :

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

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

Avez vous déja ue ce problème ?

merci

Avatar de bestmomo
bestmomo

Salut,

Tu crées un salarié sans préciser l'entreprise (il manque la clé étrangère). Quel est le code pour la création ?

Avatar de MM
MM

Bonjour, merci pour ta réponse ,j'ai bien mis ma clé étrangère a la création de ma table salarié

voici ma requette :

public function store(Entreprise $entreprise)
{
    request()->validate([
        'nom' => ['required'],
        'prenom' => ['required'],
        'identifiant' => ['required'],
        'email' => ['required'],
        'mot_de_passe' => ['required'],
        'adresse' => ['required'],
        'codePostal' => ['required'],
        'ville' => ['required'],
        'dateAnniversaire' => ['required'],
    ]);

    $salarie = new Salarie();

    $salarie = Salarie::create([
        'nom' => request('nom'),
        'prenom' => request('prenom'),
        'identifiant' => request('identifiant'),
        'email' => request('email'),
        'mot_de_passe' => bcrypt(request('mot_de_passe')),
        'adresse' => request('adresse'),
        'codePostal' => request('codePostal'),
        'ville' => request('ville'),
        'dateAnniversaire' => request('dateAnniversaire'),

    ]);

    $entreprise->salaries()->save($salarie);

    return redirect()->route('entreprises.show', $entreprise->id);
}
Avatar de MM
MM

et voici mon formulaire d'ajout d'un salarié (je ne l'ai pas mis en entier)

<form action="{{ route('salaries.store', $entreprise) }}" method="POST" class="row mtop1">  

      @csrf

        <div class="input-field col s12 m6 l6">
            <p class="color_green text_form mb-0"> Entrez le nom de la personne: </p>
            <input type="text" placeholder="Nom" name="nom" value="{{ old('nom') }}">
            @if($errors ->has('nom'))
            <p class="mess_erreurs">{{ $errors->first('nom') }}</p>
            @endif
        </div>
         <div class="input-field col s12 m6 l6">
            <p class="color_green text_form"> Entrez le prénom de la personne: </p>
            <input type="text" placeholder="Prénom" name="prenom" value="{{ old('prenom') }}">
            @if($errors ->has('prenom'))
            <p class="mess_erreurs">{{ $errors->first('prenom') }}</p>
            @endif
        </div>

        <div class="input-field col s12 m6 l6">
            <p class="color_green text_form"> Entrez le prénom.premiere lettre de la personne (marylene.m) : </p>
            <input type="text" placeholder="Identifiant" name="identifiant" value="{{ old('identifiant') }}">
            @if($errors ->has('identifiant'))
            <p class="mess_erreurs">{{ $errors->first('identifiant') }}</p>
            @endif
        </div>
        
         <div class="input-field col s12 m6 l6">
            <p class="color_green text_form">Entrez l'adresse de la personne </p>
            <input type="text" name="adresse" placeholder="Adresse" value="{{ old('adresse') }}">
            @if($errors ->has('adresse'))
            <p class="mess_erreurs">{{ $errors->first('adresse') }}</p>
            @endif
        </div>


</form
Avatar de bestmomo
bestmomo

Salut,

Le souci c'est que tu utilises cette syntaxe :

$salarie = Salarie::create([

Du coup ça va dans la base sans la clé étrangère. Il faut utiliser cette syntaxe :

$salarie = new Salarie([
([
        'nom' => request('nom'),
        'prenom' => request('prenom'),
        'identifiant' => request('identifiant'),
        'email' => request('email'),
        'mot_de_passe' => bcrypt(request('mot_de_passe')),
        'adresse' => request('adresse'),
        'codePostal' => request('codePostal'),
        'ville' => request('ville'),
        'dateAnniversaire' => request('dateAnniversaire'),

    ]);
Avatar de MM
MM

Ca marche supper merci !!

Vous ne pouvez pas répondre à ce sujet.