Laravel Atributos do OPTION / Form SELECT - (AJUDA)

19/01/2017

11

Bom dia pessoal,

Estou com um problema em listar os nomes direto do DB no meu menu de opções.
Não consigo trazer simplesmente o nome de uma categoria que desejo selecionar, ele traz todo objeto.

Detalhes do código:

Meu formulário SELECT:

<div class="form-group">
{{ Form::label('Category', 'Categoria:') }}
{{ Form::select('category_id', $categories , null, ['class'=>'form-control']) }}
</div>

Meu controller:

public function edit($id)
{
$product = $this->repository->find($id);
$categories = $this->categoryRepository->all(['name']);
return view('admin.products.edit', compact('product','categories'));
}

Dessa forma de cima a opção que estar vindo no meu menu de opções estar dessa forma {"name":"alterada categoria"}, conforme código abaixo:

<label for="Category">Categoria:</label>
<select class="form-control" name="category_id"><option value="0">{"name":"alterada categoria"}</option><option value="1" selected="selected">{"name":"namnam"}</option><option value="2">{"name":"doloribus"}</option><option value="3">{"name":"ipsum"}</option><option value="4">{"name":"culpa"}</option><option value="5">{"name":"quis"}</option><option value="6">{"name":"dolore"}</option><option value="7">{"name":"veritatis"}</option><option value="8">{"name":"dignissimos"}</option><option value="9">{"name":"eveniet"}</option><option value="10">{"name":"Nome da categoria"}</option><option value="11">{"name":"Categoria"}</option><option value="12">{"name":"categoriziado"}</option><option value="13">{"name":""}</option><option value="14">{"name":"animie"}</option><option value="15">{"name":"blabla"}</option><option value="16">{"name":"uashuahusa"}</option><option value="17">{"name":"Produto novo"}</option></select>

Queria trazer somente o nome da categoria, dessa forma "alterada categoria".
Resolvi usar o lists do laravel, para especificar o quero trazer.

então fiz dessa forma.

Implementei o meu lists na minha classe que implementa a interface.

Minha interface:

interface RepositoryInterface
{

/**
* Retrieve data array for populate field select
*
* @param string $column
* @param string|null $key
*
* @return \\Illuminate\\Support\\Collection|array
*/
public function lists($column, $key = null);
/**

Minha implementação do meu metodo lists():

public function lists()
{
return $this->model->lists('name','id');
}

Minha chamada no controller:

public function edit($id)
{
$product = $this->repository->find($id);
$categories = $this->categoryRepository->lists();
return view('admin.products.edit', compact('product','categories'));
}

O meu resultado que eu teria no meu menu option seria somente o nome da minha categoria, mas estar apresentando esse erro:

FatalErrorException in CategoryRepositoryEloquent.php line 16:
Declaration of SuperCompras\\Repositories\\CategoryRepositoryEloquent::lists() must be compatible with Prettus\\Repository\\Contracts\\RepositoryInterface::lists($column, $key = NULL)

Já tentei solucionar isso mas não consigo.

Alguém poderia me ajudar, por favor? Ficarei grato!

Abraço!
Responder

Posts

10/05/2019

Michel Leal

Bom dia pessoal,

Estou com um problema em listar os nomes direto do DB no meu menu de opções.
Não consigo trazer simplesmente o nome de uma categoria que desejo selecionar, ele traz todo objeto.

Detalhes do código:

Meu formulário SELECT:

<div class="form-group">
{{ Form::label('Category', 'Categoria:') }}
{{ Form::select('category_id', $categories , null, ['class'=>'form-control']) }}
</div>

Meu controller:

public function edit($id)
{
$product = $this->repository->find($id);
$categories = $this->categoryRepository->all(['name']);
return view('admin.products.edit', compact('product','categories'));
}

Dessa forma de cima a opção que estar vindo no meu menu de opções estar dessa forma {"name":"alterada categoria"}, conforme código abaixo:

<label for="Category">Categoria:</label>
<select class="form-control" name="category_id"><option value="0">{"name":"alterada categoria"}</option><option value="1" selected="selected">{"name":"namnam"}</option><option value="2">{"name":"doloribus"}</option><option value="3">{"name":"ipsum"}</option><option value="4">{"name":"culpa"}</option><option value="5">{"name":"quis"}</option><option value="6">{"name":"dolore"}</option><option value="7">{"name":"veritatis"}</option><option value="8">{"name":"dignissimos"}</option><option value="9">{"name":"eveniet"}</option><option value="10">{"name":"Nome da categoria"}</option><option value="11">{"name":"Categoria"}</option><option value="12">{"name":"categoriziado"}</option><option value="13">{"name":""}</option><option value="14">{"name":"animie"}</option><option value="15">{"name":"blabla"}</option><option value="16">{"name":"uashuahusa"}</option><option value="17">{"name":"Produto novo"}</option></select>

Queria trazer somente o nome da categoria, dessa forma "alterada categoria".
Resolvi usar o lists do laravel, para especificar o quero trazer.

então fiz dessa forma.

Implementei o meu lists na minha classe que implementa a interface.

Minha interface:

interface RepositoryInterface
{

/**
* Retrieve data array for populate field select
*
* @param string $column
* @param string|null $key
*
* @return \\\\Illuminate\\\\Support\\\\Collection|array
*/
public function lists($column, $key = null);
/**

Minha implementação do meu metodo lists():

public function lists()
{
return $this->model->lists('name','id');
}

Minha chamada no controller:

public function edit($id)
{
$product = $this->repository->find($id);
$categories = $this->categoryRepository->lists();
return view('admin.products.edit', compact('product','categories'));
}

O meu resultado que eu teria no meu menu option seria somente o nome da minha categoria, mas estar apresentando esse erro:

FatalErrorException in CategoryRepositoryEloquent.php line 16:
Declaration of SuperCompras\\\\Repositories\\\\CategoryRepositoryEloquent::lists() must be compatible with Prettus\\\\Repository\\\\Contracts\\\\RepositoryInterface::lists($column, $key = NULL)

Já tentei solucionar isso mas não consigo.

Alguém poderia me ajudar, por favor? Ficarei grato!

Abraço!




Opa.....

Tente get() no lugar de find()

$product = $this->repository->where('id',$id)->get();

Quando vc usa find(), na view vc faz uma associação direta sem necessidade de loop, com o get() você recebe um object como retorno podendo usar loop, no caso foreach();

Espero poder ajudar.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira