通过一对一连接更新 "user" 和 "technicien"

Update on "user" and "technicien" with one to one connection

我有一对一连接的用户和技术员表,技术员继承自用户。通过编辑表单编辑技术人员信息并保存后,表用户和技术人员不会发生更新。也没有错误。

这是我的代码:

控制器

public function edit($id)
{
    $technicien=technicien::find($id);
    $user = $technicien->user;
    return view('technicien.edit',['technicien'=>$technicien])->with('user',$user);
}

public function update(Request $request, $id)
{
    // do some request validation

    $technicien=technicien::find($id);
    $technicien->update($request->all());
    $technicien->user->update($request->get('user'));
    $user->nom = $request->update('nom');

    return redirect('/technicien');
    }

查看

 @extends('Layouts/app')
 @extends('Layouts.master')
 @section('content')
<div class="container">
    <div class="row">
        <div class="col-md-10">
            <h1>Modifier Technicien</h1>
        <form action="{{ route('technicien.update', $technicien->technicien  ) }}" method="update">
        {{csrf_field()}}
        {{ method_field('PATCH') }}


             <div class="form-group">
            <label for="nom">Nom</label>
            <input id="nom" type="text" class="form-control" name="user[nom]" value="{{$user->nom}}" >
        </div>
        <div class="form-group">
            <label for="prenom">Prenom</label>
            <input id="prenom" type="text" class="form-control" name="user[prenom]" value="{{$user->prenom}}" >
        </div>
        <div class="form-group">
            <label for="prenom">Email</label>
            <input id="prenom" type="text" class="form-  control" name="user[email]" value="{{$user->email}}" >
        </div>

        <div class="form-group">
            <label for="">moyenne Avis</label>
            <input type="text"  name="moyenne_avis" class="form-control" value ="{{$technicien->moyenne_avis}}" >
        </div>
        <div class="form-group">
            <label for="">Etat Technicien</label>
            <input type="text"  name="actif" class="form-control" value ="{{$technicien->actif}}" >
        </div>

        <div class="form-group">
            <input type="submit" value="enregistrer"        class="form-control btn btn-primary">
        </div>
            </div>




        </form>
    </div>
</div>
@endsection

Route.php

Route::get('/technicien/{id}/edit', 'TechnicienController@edit');
Route::patch('/technicien/{id}', 'TechnicienController@update')->name('technicien.update');

模型 1

<?php

namespace App;

 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
class technicien extends Model
{
 protected $fillable = [
    'moyenne_avis', 'actif',
];
use SoftDeletes;
protected $guarded = [];
 protected $dates = ['deleted_at'];
    public function zoneintervention()
{
    return $this->belongsToMany('App\zoneintervention','technicien_zone','technicien_id','zoneintervention_id');

}
    public function metier()
{
    return $this->belongsToMany('App\metier','technicien_metier','technicien_id','metier_id');

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

 public function tarificationtache()
 {
    return $this->belongsToMany('App\tarificationtache','technicien_tarificationtache','technicien_id','tarificationtache_id');
  }


}

模型2

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
public function technicien()
{
    return $this->hasOne('App\technicien');

}

use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'email', 'password','nom','prenom','tel','mobil','role',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];
}

尝试一对一的关系。 为用户 table 和技术人员 table 建立关系,然后尝试进行更新。

在控制器中试试这个

$user = User::with('technicien')->find($id);
$data['id'] = $id;

$data = $this->validate($request, [
        'moyenne_avis' => 'required',
]);

$user->technicien()->whereUserId($data['id'])->update(['moyenne_avis' => $data['moyenne_avis']
]);

return redirect('/technicien')->with('Success', 'Records updated');

同时在你的 view.blade

中更改表单方法如下
<form action="{{ action('TechnicienController@update', $user->id) }}" method="post">

另外,使用 <input name="_method" type="hidden" value="PATCH">

而不是 {{ method_field('PATCH') }}

Note: Table name should be plural for controller and model name.
eg: Table name: users Controller name: UserController Model name: User
Make sure this same in urs too.

控制器

public function edit($id)
{
// better to use findOrFail (it will throw an exception about missing 
objects)
$technicien = technicien::findOrFail($id);
return view('technicien.edit', compact('technicien'));
}

public function update(Request $request, $id)
{
$technicien=technicien::findOrFail($id);
$technicien->user->update($request->get('user'));
$technicien->update($request->get('technicien'));
return redirect('/technicien');
}

和视图

@extends('Layouts/app')
@extends('Layouts.master')
@section('content')
  <div class="container">
     <div class="row">
        <div class="col-md-10">
            <h1>Modifier Technicien</h1>
            <form action="{{ route('technicien.update', $technicien ) }}"         
                method="post">
                {{csrf_field()}}
                {{ method_field('patch') }}
                <div class="form-group">
                    <label for="nom">Nom</label>
                    <input id="nom" type="text" class="form-control" 
name="user[nom]" value="{{$technicien->user->nom}}" >
                </div>
                <div class="form-group">
                    <label for="prenom">Prenom</label>
                    <input id="prenom" type="text" class="form-control" 
name="user[prenom]" value="{{$technicien->user->prenom}}" >
                </div>
                <div class="form-group">
                    <label for="prenom">Prenom</label>
                    <input id="prenom" type="text" class="form-control" 
name="user[tel]" value="{{$technicien->user->tel}}" >
                </div>
                <div class="form-group">
                    <label for="prenom">Prenom</label>
                    <input id="prenom" type="text" class="form-control" 
name="user[mobil]" value="{{$technicien->user->mobil}}" >
                </div>
                <div class="form-group">
                    <label for="prenom">Prenom</label>
                    <input id="prenom" type="text" class="form-control" 
name="user[role]" value="{{$technicien->user->role}}" >
                </div>
                <div class="form-group">
                    <label for="prenom">Email</label>
                    <input id="prenom" type="text" class="form-control" 
name="user[email]" value="{{$technicien->user->email}}" >
                </div>
                <div class="form-group">
                    <label for="prenom">Email</label>
                    <input id="prenom" type="text" class="form-control" 
name="user[password]" value="{{$technicien->user->password}}" >
                </div>
                <div class="form-group">
                    <label for="">moyenne Avis</label>
                    <input type="text"  name="technicien[moyenne_avis]" 
class="form-control" value="{{$technicien->moyenne_avis}}" >
                </div>
                <div class="form-group">
                    <label for="">Etat Technicien</label>
                    <input type="text"  name="technicien[actif]" 
 class="form-control" value="{{$technicien->actif}}" >
                </div>

                <div class="form-group">
                    <input type="submit" value="enregistrer" class="form-
 control btn btn-primary">
                </div>
            </form>
        </div>
    </div>
</div>
@endsection