[php] Laravel 5.2-Eloquent 테이블에 대한 사용자 지정 기본 키로 문자열 사용이 0이 됨

이메일을 내 테이블의 기본 키로 사용하려고하므로 내 설득력있는 코드는-

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserVerification extends Model
{
    protected $table = 'user_verification';
    protected $fillable =   [
                                'email',
                                'verification_token'
                            ];
    //$timestamps = false;
    protected $primaryKey = 'verification_token';
}

그리고 내 DB는 다음과 같습니다.

여기에 이미지 설명 입력

하지만 이렇게하면

UserVerification::where('verification_token', $token)->first();

나는 이것을 얻고있다-

{
  "email": "sdfsdf@sdfsdf.sdf",
  "verification_token": 0,
  "created_at": "2016-01-03 22:27:44",
  "updated_at": "2016-01-03 22:27:44"
}

따라서 인증 토큰 / 기본 키 는 0이됩니다.

누구든지 도와 주시겠습니까?



답변

이것은 2015 년 12 월 29 일에 업그레이드 문서에 추가 되었으므로 이전에 업그레이드했다면 놓쳤을 것입니다.

모델에서 속성을 가져올 때 해당 열을 정수, 문자열 등으로 캐스팅해야하는지 확인합니다.

기본적으로 자동 증가 테이블의 경우이 방법에서 ID는 정수로 간주됩니다.

https://github.com/laravel/framework/blob/5.2/src/Illuminate/Database/Eloquent/Model.php#L2790

따라서 해결책은 다음과 같습니다.

class UserVerification extends Model
{
    protected $primaryKey = 'your_key_name'; // or null

    public $incrementing = false;

    // In Laravel 6.0+ make sure to also set $keyType
    protected $keyType = 'string';
}


답변

$incrementing거짓으로 설정된 모델에서

public $incrementing = false;

이렇게하면 자동 증가 필드라고 생각하지 않습니다.

Laravel Docs-Eloquent-모델 정의


답변

설정해야하는 모델에는 두 가지 속성이 있습니다. 첫 번째 $primaryKey는 모델에 기본 키가 필요한 열을 알려줍니다. 두 번째 $incrementing는 기본 키가 선형 자동 증가 값이 아님을 알 수 있도록합니다.

class MyModel extends Model
{
    protected $primaryKey = 'my_column';

    public $incrementing = false;
}

자세한 내용 은 Eloquent 문서Primary Keys섹션을 참조하십시오 .


답변

Postman을 사용하여 Laravel API를 테스트했습니다.

다음과 같은 오류를 받았습니다.

“SQLSTATE [42S22] : 열을 찾을 수 없음 : 1054 알 수없는 열”Laravel이 두 개의 열 “created_at”및 “updated_at”를 자동으로 생성하려고했기 때문입니다.

나는 public $timestamps = false;내 모델 에 들어가야 했다. 그런 다음 Postman으로 다시 테스트 "id" = 0하고 데이터베이스에 변수가 생성되는 것을 확인했습니다 .

마침내 public $incrementing false;API를 수정하기 위해 추가 해야했습니다.


답변

아이디를 계속 사용


<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class UserVerification extends Model
{
    protected $table = 'user_verification';
    protected $fillable =   [
                            'id',
                            'email',
                            'verification_token'
                            ];
    //$timestamps = false;
    protected $primaryKey = 'verification_token';
}

이메일을 받으십시오.

$usr = User::find($id);
$token = $usr->verification_token;
$email = UserVerification::find($token);


답변