arrays - storage_path laravel 5
Almacenamiento de matriz o objeto estándar en la base de datos de la aplicación Laravel (2)
¿Cuál es el esquema de la tabla de base de datos para almacenar Array o stdObject en una columna?
Cuando uso -> cadena e inserto una variable de matriz, solo almacena la palabra "Matriz" en la columna db.
¿Tiene Laravel soporte para array?
Si no, ¿qué metodología debo implementar?
La mejor manera desde Laravel 5.1 es CASTAR su campo de tabla de esta manera:
class Mytable extends Model
{
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
''my_field'' => ''array'',
];
Lea más sobre la conversión de atributos en la página de documentos oficiales de Laravel. La frase:
La propiedad $ casts en su modelo proporciona un método conveniente para convertir atributos a tipos de datos comunes. La propiedad $ casts debe ser una matriz donde la clave es el nombre del atributo que se está convirtiendo, mientras que el valor es el tipo al que desea convertir la columna. Los tipos de conversión admitidos son: entero, real, flotante, doble, cadena, booleano, objeto, matriz , colección, fecha y fecha y hora .
La única limitación que docs no dice es que no puedes trabajar directamente con esta matriz, como esto
$myTable.my_field[]=''new array element'';
en su lugar, debe preparar la matriz por separado y luego asignarla al campo, de esta manera:
$temp=[];
$temp[]=''new array element'';
$myTable.my_field[]=$temp;
Si usa una versión anterior de Laravel, use una respuesta proporcionada por The Alpha , o mejor aún, deje su trabajo :).
Puedes guardar / insertar datos serializados en un campo de tipo TEXT
pero para esto tienes que usar algo con php
, por ejemplo:
$arr = array(''x'', ''y'', ''z'');
Para insertar esto en un campo de base de datos puede usar la función serialize como esta
$serializedArr = serialize($arr);
Ahora, puede insertar la matriz $serializedArr
en la base de datos y cuando recupere los datos para usar, simplemente unserialize usando algo como:
$record = SomeModel::find(1);
unserialize($record->field_name);
Además, puede usar accessors-and-mutators de accessors-and-mutators de Laravel para automatizar todo el proceso, verifique el manual, es muy simple. Si necesita más ayuda con estos accessors-and mutators
, deje un mensaje con los detalles de su table
.
Actualizar:
Dado que Laravel 5.x
permite la conversión de atributos , es posible convertir atributos a otro tipo de datos para convertirlos en tiempo de ejecución. En este caso, simplemente declare una propiedad protected $casts
, por ejemplo:
protected $casts = [
''is_admin'' => ''boolean'', // Will convarted to (Bool)
''options'' => ''array'', // Will convarted to (Array)
];
La array
es particularmente útil para trabajar con columnas que se almacenan como JSON
serializado. Por ejemplo, si su base de datos tiene un campo de tipo TEXT
que contiene JSON serializado, agregar la matriz convertida a ese atributo deserializará automáticamente el atributo a una matriz de PHP
cuando acceda a él en su modelo Eloquent
y también se serializará automáticamente de nuevo a JSON
cuando establece un valor para esta propiedad, por ejemplo:
$user = User::find(1);
// $options is an array...
$options = $user->options;
// options is automatically serialized back to JSON...
$user->options = [''foo'' => ''bar''];