Estoy tratando de usar el correo electrónico como clave principal de mi tabla, por lo que mi elocuente código es-
<?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';
}
Y mi DB es así
pero si hago esto
UserVerification::where('verification_token', $token)->first();
Estoy recibiendo esto
{
"email": "[email protected]",
"verification_token": 0,
"created_at": "2016-01-03 22:27:44",
"updated_at": "2016-01-03 22:27:44"
}
Entonces, el token de verificación / clave principal se convierte en 0.
Alguien puede ayudarme porfavor?
$incrementing
campo sea público en lugar de protegido?$incrementing
público y$primaryKey
protege? Es bastante arbitrario. Supongo$incrementing
que no tenían métodos getter o setter en versiones anteriores de Eloquent (ahora sí) y simplemente no querían hacer un cambio importante después de agregarloschunk
, puede enfrentar el siguiente error:SQLSTATE[42S22]: Column not found: 1054 Unknown column 'example.' in 'order clause'
. EN este caso, debe definir explícitamente laorderBy
declaración, que Eloquent está tratando de adjuntar a su consulta con la clave principal.En el modelo establecido
$incrementing
en falsopublic $incrementing = false;
Esto evitará que piense que es un campo de incremento automático.
Laravel Docs - Eloquent - Definición de modelos
fuente
Hay dos propiedades en el modelo que necesita configurar. El primero
$primaryKey
en decirle al modelo en qué columna esperar la clave principal. El segundo$incrementing
para que sepa que la clave principal no es un valor lineal de incremento automático.class MyModel extends Model { protected $primaryKey = 'my_column'; public $incrementing = false; }
Para obtener más información, consulte la
Primary Keys
sección de la documentación sobre Eloquent .fuente
public $incrementing
coincidir con la clase principal.Estaba usando Postman para probar mi API de Laravel.
Recibí un error que decía
Tuve que ingresar
public $timestamps = false;
a mi modelo. Luego, volví a probar con Postman y vi que"id" = 0
se estaba creando una variable en mi base de datos.Finalmente tuve que agregar
public $incrementing false;
para arreglar mi API.fuente
sigue usando la identificación
<?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'; }
y recibe el correo electrónico:
fuente