php - real - query scopes laravel
Quitar la clave cuando las colecciones de filtro laravel (4)
Intenta agregar values()
$result = $result->filter(function ($item) {
return $item->id > 5;
})->values()->all();
Me encontré con un problema al usar el filtro con Laravel 5.2, después de filtrar, obtuve una clave inesperada como "0", "1", "2" ..., ¿cómo puedo eliminarla?
Antes del filtro:
[
{
"id": 1,
"user_id": 11,
"location": "1",
"content": "1",
"interest_id": 1,
"longitude": 1,
"latitude": 1,
"place_id": "1",
"created_at": "2016-06-09 15:44:18",
"updated_at": "2016-06-02 14:28:42",
"deleted_at": null
},
{
"id": 2,
"user_id": 12,
"location": "Forest Lake QLD, Australia",
"content": "I''m newbie. Hello everybody",
"interest_id": 1,
"longitude": 152.9692508,
"latitude": -27.6236519,
"place_id": "ChIJB_NHl8hOkWsRMIne81qjAgU",
"created_at": "2016-06-09 14:28:42",
"updated_at": "2016-06-09 14:28:42",
"deleted_at": null
},
{
"id": 8,
"user_id": 11,
"location": "Hendra QLD, Australia",
"content": "What time is it?",
"interest_id": 1,
"longitude": 153.0635202,
"latitude": -27.4225981,
"place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU",
"created_at": "2016-06-09 14:28:42",
"updated_at": "2016-06-09 14:28:42",
"deleted_at": null
},
{
"id": 9,
"user_id": 11,
"location": "Hendra QLD, Australia",
"content": "Nice Cream!!!!????????",
"interest_id": 2,
"longitude": 153.0635202,
"latitude": -27.4225981,
"place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU",
"created_at": "2016-06-09 14:28:42",
"updated_at": "2016-06-09 14:28:42",
"deleted_at": null
},
{
"id": 4,
"user_id": 17,
"location": "Forest Lake QLD, Úc",
"content": "Have a nice day!",
"interest_id": 1,
"longitude": 152.9692508,
"latitude": -27.6236519,
"place_id": "ChIJB_NHl8hOkWsRMIne81qjAgU",
"created_at": "2016-06-09 14:28:42",
"updated_at": "2016-06-09 14:28:42",
"deleted_at": null
},
{
"id": 7,
"user_id": 18,
"location": "Hendra QLD, Australia",
"content": "Where is Kiet Bui? ❤️❤️❤️❤️❤️",
"interest_id": 1,
"longitude": 153.0635202,
"latitude": -27.4225981,
"place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU",
"created_at": "2016-06-09 14:28:42",
"updated_at": "2016-06-09 14:28:42",
"deleted_at": null
}
]
Después del filtro, id> 5 por ejemplo:
{
"2": {
"id": 8,
"user_id": 11,
"location": "Hendra QLD, Australia",
"content": "What time is it?",
"interest_id": 1,
"longitude": 153.0635202,
"latitude": -27.4225981,
"place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU",
"created_at": "2016-06-09 14:28:42",
"updated_at": "2016-06-09 14:28:42",
"deleted_at": null
},
"3": {
"id": 9,
"user_id": 11,
"location": "Hendra QLD, Australia",
"content": "Nice Cream!!!!????????",
"interest_id": 2,
"longitude": 153.0635202,
"latitude": -27.4225981,
"place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU",
"created_at": "2016-06-09 14:28:42",
"updated_at": "2016-06-09 14:28:42",
"deleted_at": null
},
"5": {
"id": 7,
"user_id": 18,
"location": "Hendra QLD, Australia",
"content": "Where is Kiet Bui? ❤️❤️❤️❤️❤️",
"interest_id": 1,
"longitude": 153.0635202,
"latitude": -27.4225981,
"place_id": "ChIJAXNg5PBYkWsRIIve81qjAgU",
"created_at": "2016-06-09 14:28:42",
"updated_at": "2016-06-09 14:28:42",
"deleted_at": null
}
}
¿Cómo puedo eliminar la clave 2, 3 y 5 en el resultado y solo obtener una matriz como antes de filtrar? Cualquier ayuda es de agradecer. Editar: Mi código:
$result = $result->filter(function ($item) {
return $item->id > 5;
})->all();
No puedes hacer eso si quieres usar el ayudante de filter()
, porque así es como funciona este ayudante. Quiero decir que no hay parámetros o algo para este método. Solo puedes reconstruir la colección devuelta.
O bien, puede usar el código del método filter()
para crear su propio ayudante, como myFilter()
y modificarlo un poco, por ejemplo:
public function myFilter(callable $callback)
{
$return = [];
foreach ($this->items as $key => $value) {
if ($callback($value, $key)) {
// $return[$key] = $value; // original line from filter() method
$return[] = $value; // Here you want to remove $key
}
}
return new static($return);
}
O simplemente podrías usar la colección con índices. Me refiero a que usualmente usas la colección para iterar sobre ella y estos índices no te molestarán.
Tuve el mismo problema al ordenar: el ejemplo es ordenar los resultados de los juegos por puntos y objetivos. La ordenación agregada clave attr en el resultado. Así que uso en el final -> valores () -> todos () para obtener una matriz de valores sin claves.
P.ej:
$sorted = $resultados->sortByDesc(''pts'')->sortByDesc(''gf'')->values()->all();
En tu caso:
$filteredValues = $filtered->values()->all();
Espero que te ayude.
$result = $result->filter(function ($item) {
return $item->id < 5;
})->all();
Disfrutar !!
$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($item) {
return $item < 2;
});
$filtered->all();
return $filtered;
resultado: [1]
Pero:
$collection = collect([1, 2, 3, 4]);
$filtered = $collection->filter(function ($item) {
return $item > 2;
});
$filtered->all();
return $filtered;
Resultado: {"2": 3, "3": 4}
no se como, porque