todas - php artisan migrate table
Tipo de matriz de migración de Laravel(matriz de tienda en columna de base de datos) (1)
Quiero almacenar una matriz de enteros en mi tabla y no puedo encontrar ningún tipo que admita matriz en la Documentation , ninguna sugerencia.
Migración:
public function up()
{
Schema::create(''pickups'', function (Blueprint $table) {
$table->increment(''id'');
$table->boolean(''default'');
$table->integer(''shifts''); <<--------- HERE I want to store an array of integers
$table->integer(''status_id'');
$table->timestamps();
});
}
El tipo de datos de la array
no está presente en todos los sistemas de base de datos y debido a que Schema Builder de Laravel es independiente de la base de datos, no ofrece métodos para crear columnas de tipos de datos que no sean comunes. Así que tienes dos opciones:
1. Use una declaración SQL sin procesar para agregar la columna, algo como la siguiente declaración que creo que debería funcionar. Aunque no estoy seguro de si Query Builder o Eloquent pueden manejar estos tipos de columnas correctamente:
DB::statement(''ALTER TABLE pickups ADD COLUMN shifts integer[]'');
2. Utilice la solución disponible de Eloquent mediante la conversión de atributos . En su migración cree la columna como json
así:
public function up()
{
Schema::create(''pickups'', function (Blueprint $table) {
$table->increment(''id'');
$table->boolean(''default'');
$table->json(''shifts'');
$table->integer(''status_id'');
$table->timestamps();
});
}
Luego, puede configurar su modelo de Pickup
(si aún no lo ha hecho) y usar la propiedad $casts
:
class Pickup extends Model
{
protected $casts = [
''shifts'' => ''array''
];
}
Esto permitirá que Eloquent sepa que cuando obtenga datos de la base de datos deberá convertir el valor de la columna de shifts
en una array
. Esto solo es emular una matriz real, ya que en el nivel de la base de datos la columna es de tipo TEXT
y la matriz está serializada. Sin embargo, al eliminar la serialización del valor de la columna, Eloquent devuelve una matriz real de enteros para que los use en su código. A continuación se muestra un ejemplo de caso de uso:
// Create a new Pickup entry
$pickup = App/Pickup::create([
''default'' => true,
''shifts'' => ''[1, 5, 7]'', // you can easily assign an actual integer array here
''status_id'' => 1
]);
Suponiendo que lo anterior generó una entrada con id
igual a 1
cuando más tarde recupere la entrada:
$pickup = App/Pickup::find(1);
dump($pickup->shifts);
El dump()
del código anterior generará una matriz real de enteros:
array:3 [▼
0 => 1
1 => 5
2 => 7
]