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;
그러면 자동 증분 필드라고 생각하지 않게 됩니다.
설정해야 할 모델에는 두 가지 속성이 있습니다.첫 번째$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
'source' 카테고리의 다른 글
Tinyint vs Bit? (0) | 2022.09.22 |
---|---|
GORM에서는 autoCreateTime 및 autoUpdateTime을 특정 시간대로 설정하려면 어떻게 해야 합니까? (0) | 2022.09.22 |
열려 있는 DB 연결 요청 수와 닫혀 있는 경우 인쇄하거나 확인할 수 있습니까?장고 (0) | 2022.09.22 |
Unix_timestamp()를 사용하여 INT(11) 열을 업데이트하도록 MySQL/MariaDB의 컬럼 설정 (0) | 2022.09.22 |
이메일 주소의 필드 유형 및 크기를 지정할 수 있습니까? (0) | 2022.09.21 |