Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Property [id] does not exist on this collection instance

Estou tentando acessar o atributo ID de uma coleção e o laravel informa que não existe, porém o mesmo encontra-se lá conforme colletion abaixo.

[{"id":1,"decription":"Branco","created_at":null,"updated_at":null}]

Forma que estou usando para acessar o atributo:

  <select class="form-control" name="color" id="color">
        @foreach($colors as $color)
            <option>{{ $color->id }}</option>
        @endforeach
    </select>

Quando executo o codigo abaixo o mesmo funciona normalmente:

  <select class="form-control" name="color" id="color">
        @foreach($colors as $color)
            <option>{{ $color }}</option>
        @endforeach
    </select>
5 respostas

Olá Francisco,

Diz por favor o que aparece se você utilizar o seguinte código:

<select class="form-control" name="color" id="color">
    {{--
    @foreach($colors as $color)
        <option>{{ $color }}</option>
    @endforeach
    --}}
</select>

@dump($colors)

Bom dia!

Lucas segue o resultado:

array:1 [▼ "colors" => Illuminate\Database\Eloquent\Collection {#282 ▶} ]

Apenas complementando:

array:1 [▼ "colors" => Illuminate\Database\Eloquent\Collection {#282 ▼

#items: array:2 [▼
  0 => App\Color {#283 ▼
    #connection: "mysql"
    #table: "colors"
    #primaryKey: "id"
    #keyType: "int"
    +incrementing: true
    #with: []
    #withCount: []
    #perPage: 15
    +exists: true
    +wasRecentlyCreated: false
    #attributes: array:4 [▼
      "id" => 1
      "decription" => "Branco"
      "created_at" => null
      "updated_at" => null
    ]
    #original: array:4 [▼
      "id" => 1
      "decription" => "Branco"
      "created_at" => null
      "updated_at" => null
    ]
    #changes: []
    #casts: []
    #classCastCache: []
    #dates: []
    #dateFormat: null
    #appends: []
    #dispatchesEvents: []
    #observables: []
    #relations: []
    #touches: []
    +timestamps: true
    #hidden: []
    #visible: []
    #fillable: []
    #guarded: array:1 [▼
      0 => "*"
    ]
  }
  1 => App\Color {#284 ▼
    #connection: "mysql"
    #table: "colors"
    #primaryKey: "id"
    #keyType: "int"
    +incrementing: true
    #with: []
    #withCount: []
    #perPage: 15
    +exists: true
    +wasRecentlyCreated: false
    #attributes: array:4 [▼
      "id" => 2
      "decription" => "Azul"
      "created_at" => null
      "updated_at" => null
    ]
    #original: array:4 [▼
      "id" => 2
      "decription" => "Azul"
      "created_at" => null
      "updated_at" => null
    ]
    #changes: []
    #casts: []
    #classCastCache: []
    #dates: []
    #dateFormat: null
    #appends: []
    #dispatchesEvents: []
    #observables: []
    #relations: []
    #touches: []
    +timestamps: true
    #hidden: []
    #visible: []
    #fillable: []
    #guarded: array:1 [▼
      0 => "*"
    ]
  }
]

} ]

solução!

Opa Francisco, parece que você está com um array extra. Primeiro tem um array com a chave "colors" e dentro dele é que está a coleção com as cores que você quer acessar.

Testa então se assim funciona:

<select class="form-control" name="color" id="color">
    @foreach($colors["colors"] as $color)
        <option>{{ $color->id }}</option>
    @endforeach
</select>

Mesmo que o código acima funcione recomendo que dê uma olhada no motivo de ter a lista de cores dentro de um array extra.

Espero ter ajudado, qualquer dúvida é só falar!

Deu certo..

Obrigado