Duvidas sobre Collection?

Tenho esses Checkbox Meu Hobbies: Canta- Dançar(Esses hobbies aparece em checkbox’s = checked) pois tinha escolhido na index(Cadastro.)

<tr height="15px;">
   <tr>
      <td colspan="2">Hobbies que você venha pratica</td>
   </tr>
   <td colspan="2">
     <input type="checkbox" name="hobbie[]" value="Cantar"/><label>Cantar</label>
     <input type="checkbox" name="hobbie[]" value="Dançar"/><label>Dançar</label> 
     <input type="checkbox" name="hobbie[]" value="Pular"/> <label>Pular</label>
     <input type="checkbox" name="hobbie[]" value="Caminhar"/><label>Caminhar</label>
     <input type="checkbox" name="hobbie[]" value="Matação"/><label>Matação</label> 
   </td>   
</tr>

Os “Hobbies que você venha pratica” 'são para caso eu queira add mais hobbies.

Queria sabe se é possível fazer uma comparação com os hobbies que já fora adicionado com os que aparece(Adicionar mais hobbies caso eu queira). Ex: Eu tenho “Canta e Dança”, comparo com o Cantar, e caso seja TRUE, o checkbox nao aparece para escolher, e assim para os demais.

Estou tomando uma “surra”, pois queria fazer sem ajuda de javasrcipt, se isso também é possível com JS.

Estou usando um framework Laravel, pra fazer isso.

Está confusa a sua pergunta, tem como resumir e ser mais claro.

Se entendi bem, você quer comparar uma lista de hobbies do sistema (checkboxes) com a lista cadastrada pelo usuário certo?

Primeiro para exibir os hobbies que ele ainda não adicionou, você vai precisar deixar o html dinâmico…

$hobbies_sistema = ["Cantar", "Dançar", "Pular", "Caminhar", "Natação"];

Antes de imprimir no html os hobbies “faltantes”, você precisa comparar com a lista do usuário e retornar a “diferença”…

$hobbies_nao_adicionados = array_diff($hobbies_sistema, $hobbies_usuario);

Após essa verificação você imprime no html…

...
<td colspan="2">
<?php foreach ($hobbies_nao_adicionados as $hobbie): ?>
    <input type="checkbox" name="hobbie[]" value="<?=$hobbie?>"/><label><?=$hobbie?></label>
<?php endforeach; ?>
</td>
...
1 curtida

@LostSoldier Acredito que você entendeu!!

Eu já tentei usar o “array_diff”, para realizar comparações, só que não funcionou porque quando recupero os hobbies que já estão cadastrados( recupero de um relacionamento 1-N das tabelas Pessoas e Hobbies ($pessoasHobbies = Pessoa::find($id)->hobbies)), vem como uma “Collection”, e os hobbies que ainda possa vir add ( $inputHobbies = $request->input(‘hobbie’ ) vindo da view é um “Array”.

Quando tendo usar “array_diff”, estoura esse erro: array_diff(): Argument #1 is not an array

@Dragoon tentei resumir ao maxímo pra não ficar muito cansativo a leitura.

Agradeço Atenção de todos!! :]

Já tentou converter a collection em array para comparar?

https://laravel.com/docs/5.1/collections#method-toarray

Outra coisa, caso dê certo a conversão, ao usar array_diff a “ordem dos parâmetros altera o produto” :joy: ou seja, o primeiro argumento precisa ser a lista do sistema, o segundo sim seria a lista do usuário…

@Araujo, você tem um array simples que vem de um post de uma view, até ai tudo bem, depois você faz uma comparação com um objeto do tipo collection, ai esta faltando você trazer os dados em um array simples, porque garanto que hobbies é um classe que possui mais elementos correto?

Use o comando pluck da seguinte maneira:

$pessoasHobbies = Pessoa::find($id)->hobbies->pluck('Nome_do_campo');

que ai pessoasHobbies sera também um array simples. Dá uma lida no link pluck.

No próprio Laravel tem o diff que pegas as diferenças de uma collection observe nesse link diff.

Ok

1 curtida

Galera!!! Juntei as duas informações, deu certo!!! UP UP.

Obrigado @LostSoldier e @Dragoon pela ajuda.

1 curtida