Cambiar la clave primaria predeterminada en Eloquent

94

¿Puedo cambiar la clave principal del modelo Eloquent?

¿Quiero establecer la clave principal, por ejemplo, en admin_idlugar de 'id'?

Sé que puedo cambiar el nombre de la tabla para un modelo como

protected $table = "admin";

¿Existe algo similar para la clave principal?

Vuk Stanković
fuente

Respuestas:

191

si

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}
phirschybar
fuente
16
Para cualquier otra persona que haga referencia a esta pregunta, use una de las otras respuestas. $primarykeydebería ser $primaryKey(letra K mayúscula) y no funcionará de otra manera.
Jeremy Harris
4
¿Qué sucede si tengo más de un campo como clave principal?
Bagusflyer
@bagusflyer Estás bromeando, ¿verdad? ¿Más de una clave principal en una tabla de base de datos?
Novica89
@bagusflyer Eloquent no admite claves compuestas, pero aquí hay una buena solución para que pueda tener $primaryKey = array('key1', 'key1'); github.com/laravel/framework/issues/5517#issuecomment-52996610
mopo922
Solo para su información, parece que en Laravel 5.4 ya no necesita configurar su propio PK si es el mismo que el nombre del modelo, ya que lo agrega por usted (y, de lo contrario, se producirá un error).
Casa de la Moneda
14
class User extends Eloquent {

    protected $primarykey = 'admin_id';

}

pero

class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

observe la letra K (mayúscula) en la variable $ primaryKey

usuario3186817
fuente
11

Si desea utilizar una clave compuesta (una cadena)

public $incrementing = falseDebe asegurarse de configurar, de lo contrario, laravel convertirá el campo en un entero, dando0

class User extends Model {

    protected $primaryKey = 'my_string_key';
    public $incrementing = false;

}
Toby Mellor
fuente
Hice una anulación en la primaryKey como una cadena de texto col; el valor de la colección era correcto, pero cuando hice referencia a la columna como $ results-> primary_key, solo devolvería cero, aunque la colección / matriz mostró la cadena correcta, tardó un tiempo en rastrearlo cuando noté que la clave primaria se mostraba como INT e Incrementable en el objeto. Tuve que establecer public $ incrementing = false.
G-Man
7

La variable de clave principal distingue entre mayúsculas y minúsculas y debe $primaryKeyfuncionar.

Ejemplo:

protected $primaryKey = 'your_primary_key_id';

Ejemplo dentro de una clase de modelo:

class User extends Eloquent {

    protected $primaryKey = 'your_primary_key_id';

}
ajtrichards
fuente
1
¿Todavía tengo que agregarlo a la matriz $ fillable?
Anis
1
class User extends Eloquent {

    protected $primaryKey = 'admin_id';

}

Según la documentación de Laravel:


Eloquent también asumirá que cada tabla tiene una columna de clave primaria nombrada id. Puede definir una $primaryKeypropiedad para anular esta convención.

Además, Eloquent asume que la clave principal es un valor entero creciente, lo que significa que, de forma predeterminada, la clave principal se convertirá automáticamente en un int. Si desea utilizar una clave principal no incremental o no numérica, debe establecer la $incrementingpropiedad pública en su modelo en falso.

Gammer
fuente
-3

Para asignar una clave primaria debe ..->

class User extends Eloquent {

    protected $primaryKey='admin_id';

 }
Jay Momaya
fuente