使用一对一连接更新“user”和“technicien”

时间:2018-03-02 09:42:47

标签: laravel laravel-5 laravel-5.2 laravel-5.1

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

这是我的代码:

控制器

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

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:1)

CONTROLER

package com.login.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import com.mysql.jdbc.PreparedStatement;
public class LoginDao 
   {
      public boolean check(String uname ,String pass)
   {
    try
        {
        String url ="jdbc:mysql://localhost:3306/login";
        String username = "root";
        String password = "root";
        String query    = " select * from  login where Name =? and           
        password=? ";

            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/","root","root");
            PreparedStatement st = (PreparedStatement) con.prepareStatement(query);
            st.setString(1, uname);
            st.setString(2, pass);
            ResultSet rs   = st.executeQuery(query);
            if(rs.next())
                {
                    return  true;
                }
      }
    catch (Exception e)     
      {
        System.out.println("Mistake");
        e.printStackTrace();
      }

  return false;


      }
      }

和视图

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

在控制器中试试

$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 view.blade

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

也是,而不是{{ method_field('PATCH') }}使用此<input name="_method" type="hidden" value="PATCH">

  

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