Salut à tous,
Je suis actuellement un peu bloqué sur un système paraissant simple normalement, mais la je ne vois pas ce qui ne va pas.

j'ai une vue profil relatant le profil de mon utilisateur avec les infos que je peu éditer via un formulaire.

Ayant ma table users et adresses avec une relation de type
Model User

public function adresse()
    {
        return $this->hasOne('Adresse');
    }

Model Adresse

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

je cherche au submit de mon form à update ma table users et l'adresse associé avec la clef étrangère dans cette table.

Voici mon controller avec ma method update

public function update($id){

    $rules =[
        'lastname' => 'min:3|string',
        'firstname' => 'min:3|string',
        'username'=> 'min:4|unique:users',
        'mail'    => ' email|unique:users',
        'birthday' => 'date_format:d-m-Y|before:today',
        'country'=>'min:3',
        'type_street'=>'min:3',
        'number'=>'min:1|numeric',
        'street'=>'min:4|string',
        'complementary_street'=>'min:2|string',
        'town'=>'min:2|string',
        'zip'=>'min:4|numeric',
        'phone_home'=>'min:10|numeric',
        'phone_mobile'=>'min:10|numeric',
        'image_path'=>'image|max:1000|mimes:jpeg,jpg,png',
    ];

    $validator = Validator::make(Input::all(),$rules);

    if($validator->fails()){
        return Redirect::to('/profil/'.$id)
            ->with('alert_error','Merci de corriger les erreurs');
        /*return Redirect::to('/profil/'.$id)
            ->withErrors($validator)
            ->withInput(Input::except('password'));*/

    }else{
        //updating users profil $id
        $user = User::find($id);

        $user->lastname     =   Input::get('lastname');
        $user->firstname    =   Input::get('firstname');
        $user->username     =   Input::get('username');
        $user->mail         =   Input::get('mail');
        $user->mail         =   Input::get('mail');
        $user->birthday     =   Input::get('birthday');

        $user->adresse()->type_street  =   Input::get('type_street');
        $user->adresse()->number       =   Input::get('number');
        $user->adresse()->street       =   Input::get('street');
        $user->adresse()->complementary_street       =   Input::get('complementary_street');
        $user->adresse()->town         =   Input::get('town');
        $user->adresse()->zip          =   Input::get('zip');
        $user->adresse()->country      =   Input::get('country');

        $user->save();

        return Redirect::to('/profil/'.$id)
            ->with('alert_success','Votre profil est modifié avec succès.');

    }

j'arrive à bien upate mon utilisateur, mais pas ma table adresse, voici ma vue profil avec mon form.

{{ Form::model($users->toArray() + $adress->toArray(),['route'=>['users.update',$users->id],'method'=>'PATCH','files'=>true,"class"=>"clearfix","id"=>"profil-form"])}}
<p class="input-block clearfix">
                                 <label class="required" for="contact_civility"><strong> Civilité :</strong></label>
                                {{ Form::select('civility',array(
                                                      "Mr"=>"Mr",
                                                      "Mme"=>"Mme",
                                                   ),null,array("class"=>"valid","id"=>"contact_civility"))
                                                 }}
                             </p>
                             <p class="input-block clearfix">
                                 <label class="required" for="contact_lastname"><strong>Nom :</strong></label>
                                 {{Form::text('lastname',Input::old('lastname'),array('class'=>'valid','id'=>'contact_lastname',"placeholder"=>"Votre nom"))}}
                                 @if($errors->has('lastname')) <p class="help-block">{{ $errors->first('name') }} @endif
                             </p>
                             <p class="input-block">
                                 <label class="required" for="contact_firstname"><strong>Prénom :</strong></label>
                                 {{ Form::text('firstname',Input::old('firstname'),array('class'=>'valid',"id"=>"contact_firstname","placeholder"=>"Votre prénom")) }}
                                 @if($errors->has('firstname')) <p class="help-block">{{ $errors->first('firstname') }} @endif
                             </p>
                              <p class="input-block">
                                                         <label class="required" for="contact_number"><strong>Numéro :</strong></label>
                                                         {{ Form::text('number',Input::old('number'),array('class'=>'valid',"id"=>"contact_number")) }}
                                                         @if($errors->has('number')) <p class="help-block">{{ $errors->first('number') }} @endif
                                                     </p>
                                                     <p class="input-block">
                                                          <label class="required" for="contact_adresse"><strong>Adresse :</strong></label>
                                                           {{ Form::text('street',Input::old('street'),array('class'=>'valid',"id"=>"contact_street")) }}
                                                           @if($errors->has('street')) <p class="help-block">{{ $errors->first('street') }} @endif
                                                     </p>
                                                     <p class="input-block">
                                                          <label class="required" for="contact_complementary"><strong>Complément d'adresse :</strong></label>
                                                           {{ Form::text('complementary_street',Input::old('complementary_street'),array('class'=>'valid',"id"=>"contact_complementary")) }}
                                                           @if($errors->has('complementary_street')) <p class="help-block">{{ $errors->first('complementary_street') }} @endif
                                                     </p>
                                                      <p class="text-center">
                      {{ Form::submit('Sauvegarder',array('id'=>'submit-contact',"class"=>"green-sea-flat-button")) }}
                  </p>
                  {{Form::close()}}

Je vous remercie de votre aide.

Ps: la doc lu en large et en travers sur le model binding .

1 réponse


Tu as quoi comme type d'erreur?

Ce qui me semble bizarre dans ton code c'est ces lignes:

$user->adresse()->type_street  =   Input::get('type_street');
$user->adresse()->number       =   Input::get('number');
$user->adresse()->street       =   Input::get('street');
$user->adresse()->complementary_street       =   Input::get('complementary_street');
$user->adresse()->town         =   Input::get('town');
$user->adresse()->zip          =   Input::get('zip');
$user->adresse()->country      =   Input::get('country');

Es-tu sûr qu'il ne vaut pas mieux mettre ($user->adresse() retourne normalement une relation hasOne alors que $user->adresse retourne un Eloquent Model):

$user->adresse->type_street  =   Input::get('type_street');
$user->adresse->number       =   Input::get('number');
$user->adresse->street       =   Input::get('street');
$user->adresse->complementary_street       =   Input::get('complementary_street');
$user->adresse->town         =   Input::get('town');
$user->adresse->zip          =   Input::get('zip');
$user->adresse->country      =   Input::get('country');
// Et ne pas oublier de sauvegarder l'adresse
$user->adresse->save();