在laravel模型中错误获取主键

时间:2016-06-07 22:29:06

标签: php mysql laravel-5 primary-key

我正在使用PHP,Laravel 5和MySQL。我正在尝试根据经过身份验证的用户获取患者,但是我得到了错误的主键值。

在PatientController中我运行:

  

$ patient = Patient :: where('userId','=',   $请求 - >用户() - > 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 个答案:

答案 0 :(得分:1)

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

您的架构将列的类型描述为整数,因此3127fc14-368e-4b06-90f2-a524986e627e只会导致integer值为3127