source

Larabel 5.2 - 커스텀프라이머리 키가 0이 되는 문자열 사용

factcode 2022. 9. 22. 00:07
반응형

Larabel 5.2 - 커스텀프라이머리 키가 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
{
    // if your key name is not 'id'
    // you can also set this to null if you don't have a primary key
    protected $primaryKey = 'your_key_name';

    public $incrementing = false;

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

모델 세트 상$incrementing거짓으로

public $incrementing = false;

그러면 자동 증분 필드라고 생각하지 않게 됩니다.

Laravel Docs - 웅변적 - 정의 모델

설정해야 할 모델에는 두 가지 속성이 있습니다.첫 번째$primaryKey모델에 기본 키를 예상할 열을 지정합니다.두 번째$incrementing기본 키가 선형 자동 증가 값이 아님을 알 수 있습니다.

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

    public $incrementing = false;
}

상세한 것에 대하여는, 을 참조해 주세요.Primary Keys를 참조하십시오.

저는 라라벨 API를 테스트하기 위해 Postman을 사용하고 있었습니다.

다음과 같은 오류를 수신했습니다.

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

나는 들어가야 했다.public $timestamps = false;내 모델에 맞춰야 합니다.그리고 나서, 우체부와 다시 테스트를 해봤는데"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);

언급URL : https://stackoverflow.com/questions/34582535/laravel-5-2-use-a-string-as-a-custom-primary-key-for-eloquent-table-becomes-0

반응형