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 .
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();