2016-06-07 55 views
0

我正在使用PHP,Laravel 5和MySQL。我正在尝试基于经过身份验证的用户获取Patient,但我得到的是主键的错误值。laravel模型中主键的错误获取

在PatientController我运行此:

$病人=病人::在哪里( '用户id', '=', $请求 - >用户() - > ID) - >得到() - >第一();

刀片中patientId的值与存储的值不同。

例如,我得到3127

而原来的值是3127fc14-368e-4b06-90f2-a524986e627e

我不休息列面临同样的问题。

感谢您的时间和精力。

user.php的

class User extends Authenticatable 
{ 
    protected $fillable = [ 
     'id','name', 'email', 'password', 
    ]; 

    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    public function patient() 
    { 
     return $this->belongsTo('App\Patient', 'patientId','id'); 
    } 
} 

UserController.php

class UserController extends Controller 
{ 
    /** 
    * @param Request $request 
    * @return \Illuminate\Http\RedirectResponse 
    */ 

    public function postSignUp(Request $request) 
    { 
     $this->validate($request,[ 
      'email' => 'required|email|unique:users', 
      'name' => 'required|max:100', 
      'password' => 'required|min:6' 
     ]); 

     $user = new User(); 
     $user->email = $request['email']; 
     $user->name = $request['name']; 
     $user->password = bcrypt($request['password']); 

     Auth::login($user); 

     return redirect()->route('dashboard'); 
    } 

    /** 
    * @param Request $request 
    * @return \Illuminate\Http\RedirectResponse 
    */ 

    public function postSignIn(Request $request) 
    { 
     $this->validate($request,[ 
      'email' => 'required', 
      'password' => 'required' 
     ]); 
     if (Auth::attempt([ 'email' => $request['email'], 'password' => $request['password']])){ 

      return redirect()->route('dashboard'); 
     } 
     return redirect()->back(); 
    } 
} 

Patient.php

class Patient extends Model 
{ 
    protected $primaryKey='patientId'; 
    public $incrementing = 'false'; 
    public $timestamps = true; 

    protected $fillable = [ 
     'patientId','contactId','guardianId','userId','patientNationalId','patientFirstName','patientSurName','patientDob','patientInsuranceNumber','patientGender' 
    ]; 

    public function user() 
    { 
     return $this->hasOne('App\User','id','userId'); 
    } 
} 

PatientController.php

class PatientController extends Controller 
{ 
    public function getDashboard(Request $request) 
    { 
     $patient = Patient::where('userId', '=', $request->user()->id)->get()->first(); 
     return view('dashboard', [ 
      'patient' => $patient 
     ]); 
    } 
} 

迁移

Schema::create('users', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->string('name'); 
    $table->string('email')->unique(); 
    $table->string('password', 60); 
    $table->rememberToken(); 
    $table->timestamps(); 
}); 

Schema::create('patients', function (Blueprint $table) { 
    $table->string('patientId')->primary(); 
    $table->string('contactId')->index()->nullable(); 
    $table->string('guardianId')->index()->nullable(); 
    $table->integer('userId')->unsigned()->nullable(); 
    $table->string('patientNationalId')->nullable(); 
    $table->string('patientFirstName')->nullable(); 
    $table->string('patientSurName')->nullable(); 
    $table->string('patientDob')->nullable(); 
    $table->string('patientGender')->nullable(); 
    $table->string('patientInsuranceNumber')->nullable(); 
    $table->timestamps(); 
    # Foreign Keys 
    $table->foreign('userId')->references('id')->on('users'); 
    $table->foreign('guardianId')->references('guardianId')->on('guardians'); 
    $table->foreign('contactId')->references('contactId')->on('contacts'); 
}); 

回答

1

您有用户ID作为引用ID中是一个整数用户的外键。 当你说原始值是3127fc14-368e-4b06-90f2-a524986e627e时,你如何创建那个id

你的架构描述了该列是一个整数所以3127fc14-368e-4b06-90f2-a524986e627e只会导致3127

+0

我打印patientId,其类型为字符串的integer值的类型。你说什么是有道理的,但我找不到错误...如果我在刀片中输入{{$ patient}},我得到以下json: '{ “patientId”:3127, “contactId “: ”0da44870-2b6a-11e6-9717-d70507957d0d“, ”guardianId“:” be3d1ad0-2b67-11e6-9f83-5d955f25c5f6" , “用户id”:2, “patientNationalId”: “968359452532” 。 ..}' – dimitrisdan