Pergunta

Estou tentando enviar um novo item da matriz para uma variável de matriz existente que contém itens do banco de dados.O que eu quero fazer é adicionar um novo item chamado 'Outros' no final deste array e exibi-lo como um menu suspenso de seleção que consiste em todos os itens do banco de dados e no final selecionar o item 'Outros' que Eu adicionei manualmente no meu controlador.

Aqui está o que tentei fazer:

    $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;
    }

o que disse é assim

Exceção não tratada

Mensagem:

Tentando obter a propriedade do local não-objeto:

C: xampp htdocs khelkheladi khelkheladi application controllers register.php na linha 104

No meu banco de dados a Competição tem esse tipo de estrutura de colunas

->id
->year
->place
->name
->created_at
->updated_at

em determinada ordem.

O que estou tentando fazer é, sem realmente inserir um item no banco de dados, apenas mostrar estaticamente os outros itens selecionados na tag select em exibição.Como insiro esse novo item sem realmente inseri-lo no banco de dados, mas para exibi-lo apenas na visualização?

A saída que estou obtendo antes apenas recuperando o item do banco de dados é assim

<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> 

o que eu gosto de fazer é assim

<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> 
Foi útil?

Solução

A maneira "limpa" de fazer isso seria criar uma instância de Competition sem enviá-lo ao banco de dados e repita mais uma vez seu ciclo com a instância extra.

No entanto, aqui você parece estar apenas produzindo uma lista, então deve ser suficiente fazer uma adição muito mais rápida à 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';

Outras dicas

Isso ocorre porque você está adicionando um não-objeto ao último elemento do array.

Aqui, suponho que você obtenha uma matriz de objetos com a propriedade name

$competition_all = Competition::all();

Aqui você adiciona um par chave=>valor ao último elemento da matriz de objetos

$newCompete = array('name'=>'Others');
array_push($competition_all, $newCompete);

Aqui você percorre o array de objetos e quando chega ao último elemento o "$competition_games->name" não tem propriedade name

foreach ($competition_all as $competition_games) {
            $this->competition_games[$competition_games->name] = $competition_games->name;
        }

Tente algo como incluir uma stdclass para isso:

$newCompete = new StdClass();
$newCompete->name = 'Others';
array_push($competition_all, $newCompete);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top