代码之家  ›  专栏  ›  技术社区  ›  IT2704

通过一对一连接更新“user”和“technicien”

  •  0
  • IT2704  · 技术社区  · 6 年前

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

    这是我的代码:

    控制器

    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
    

    路线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',
    ];
    }
    

    enter image description here

    enter image description here

    3 回复  |  直到 6 年前
        1
  •  1
  •   chagou2704    6 年前

    控制器

    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
    
        2
  •  0
  •   Samuel Henry    6 年前

    试着处理一对一的关系。 建立用户表和技师表的关系,然后尝试进行更新。

        3
  •  0
  •   Samuel Henry    6 年前

    在控制器中尝试此操作

    $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');
    

    也可以在ur视图中更改表单方法,如下所示。刀身

    <form action="{{ action('TechnicienController@update', $user->id) }}" method="post">
    

    此外,代替 {{ method_field('PATCH') }} 用这个 <input name="_method" type="hidden" value="PATCH">

    注:表名应为控制器和型号名称的复数形式。
    例如:表名:用户 控制器名称:UserController 型号名称:用户
    在urs中也要确保这一点。