Array Empuje en Laravel
Pregunta
Estoy tratando de impulsar un nuevo elemento de matriz a la variable de matriz existente que tiene elementos de la base de datos. Lo que quiero hacer es agregar un nuevo artículo llamado 'otros' al final de esta matriz y mostrarlo como seleccione desplegable en vista, que consiste en todos los elementos de la base de datos y al final de este seleccione el elemento 'Otros' que Añadido manualmente en mi controlador.
Aquí está lo que intenté hacer:
$competition_all = Competition::all();
$newCompete = array('name'=>'Others');
array_push($competition_all, $newCompete);
$this->competition_games = array('Competition');
foreach ($competition_all as $competition_games) {
$this->competition_games[$competition_games->name] = $competition_games->name;
}
Lo que dijo es así
Excepción no controlada
Mensaje:
Tratando de obtener propiedad de la ubicación no objeto:
c: \ xampp \ htdocs \ khelkheladi \ khelkheladi \ application \ controlers \ regher.php en la línea 104
En mi base de datos, la competencia tiene este tipo de estructura de columna
->id ->year ->place ->name ->created_at ->updated_at
en orden dado.
Lo que estoy tratando de hacer es sin insertar realmente un elemento en la base de datos, simplemente muestre estadísticamente los otros Seleccione el elemento en Seleccionar etiqueta en la vista. ¿Cómo inserto este artículo nuevo sin insertarlo en la base de datos, pero para mostrar solo en la vista?
La salida Lo que estoy recibiendo antes por recuperar el elemento de la base de datos es así
<select> <option value="1">Value 1</option> <option value="2">Value 2</option> <option value="3">Value 3</option> <option value="4">Value 4</option> </select>
Lo que me gusta hacer es así
<select> <option value="1">Value 1</option> <option value="2">Value 2</option> <option value="3">Value 3</option> <option value="4">Value 4</option> <option value="5">Others</option> </select>
Solución
La forma de "limpiar" sería crear una instancia de Competition
sin comprometerlo a la base de datos, y repetir una vez más su ciclo con la instancia adicional.
Sin embargo, aquí parece estar produciendo una lista, por lo que debería ser suficiente para hacer una adición mucho más rápida a la lista final:
$competition_all = Competition::all();
$this->competition_games = array('Competition');
foreach ($competition_all as $competition_games) {
$this->competition_games[$competition_games->name] = $competition_games->name;
}
$this->competition_games['name'] = 'Others';
Otros consejos
Eso es porque está agregando un no objeto al último elemento de la matriz.
Aquí supongo que obtienes una matriz de objetos con la propiedad Nombre
$competition_all = Competition::all();
Aquí agrega una tecla=> Par de valor al último elemento de la matriz de objetos
$newCompete = array('name'=>'Others');
array_push($competition_all, $newCompete);
Aquí caminas a través de la matriz de objetos y cuando se trata del último elemento, el nombre "$ compete_pet_games-> no tiene una propiedad de nombre
foreach ($competition_all as $competition_games) {
$this->competition_games[$competition_games->name] = $competition_games->name;
}
Probar algo como incluir un STDCLASS para él como:
$newCompete = new StdClass();
$newCompete->name = 'Others';
array_push($competition_all, $newCompete);