이메일을 내 테이블의 기본 키로 사용하려고하므로 내 설득력있는 코드는-
<?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;
이렇게하면 자동 증가 필드라고 생각하지 않습니다.
답변
설정해야하는 모델에는 두 가지 속성이 있습니다. 첫 번째 $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);