Próbuję użyć poczty e-mail jako klucza podstawowego mojej tabeli, więc mój wymowny kod to-
<?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';
}
A moja DB jest taka-
ale jeśli to zrobię-
UserVerification::where('verification_token', $token)->first();
Rozumiem to-
{
"email": "[email protected]",
"verification_token": 0,
"created_at": "2016-01-03 22:27:44",
"updated_at": "2016-01-03 22:27:44"
}
Tak więc token weryfikacyjny / klucz podstawowy przyjmuje wartość 0.
Czy ktoś może pomóc?
$incrementing
field is public instead of protected?$incrementing
public and$primaryKey
protected? It's pretty arbitrary. I'm guessing$incrementing
did not have getter or setter methods in earlier versions of Eloquent (it now does) and they just didn't want to make a breaking change after adding them inchunk
, you can face the following error:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'example.' in 'order clause'
. IN this case you need to explicitly defineorderBy
statement, which Eloquent is trying to attach to your query with the primary key.On the model set
$incrementing
to falsepublic $incrementing = false;
This will stop it from thinking it is an auto increment field.
Laravel Docs - Eloquent - Defining Models
źródło
Theres two properties on the model you need to set. The first
$primaryKey
to tell the model what column to expect the primary key on. The second$incrementing
so it knows the primary key isn't a linear auto incrementing value.class MyModel extends Model { protected $primaryKey = 'my_column'; public $incrementing = false; }
For more info see the
Primary Keys
section in the documentation on Eloquent.źródło
public $incrementing
to match the parent class.I was using Postman to test my Laravel API.
I received an error that stated
I had to enter
public $timestamps = false;
to my model. Then, I tested again with Postman and saw that an"id" = 0
variable was being created in my database.I finally had to add
public $incrementing false;
to fix my API.źródło
keep using the id
<?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'; }
and get the email :
$usr = User::find($id); $token = $usr->verification_token; $email = UserVerification::find($token);
źródło