Jump to content

Devolver valor de campo select no Laravel


klasss

Recommended Posts

Estou com uma dificuldade em conseguir devolver um valor no campo select 

 

 <label >Capitulo Associado</label>
                                        <select id="id_capitulo" name="id_capitulo" class="form-select" aria-label="Default select example">
                                            <option selected>Escolher Capitulo</option>
                                            @foreach($capitulos as $cap)
                                            <option class="form-control" value="{{$doc->id_capitulo}}" id="id_capitulo"  name="id_capitulo"> {{$cap->capitulo}} </option>
                                            @endforeach 
                                            </select>
                                        </div>

                                    <div class="form-group">
                                        <label >Nome Ficheiro</label>
                                        <input value="{{$doc->nome_ficheiro}}" type="text" class="form-control" id="nome_ficheiro" name="nome_ficheiro" placeholder="Nome Ficheiro">
                                    </div>

 

o meu problema está aqui : 
 <option class="form-control" value="{{$doc->id_capitulo}}" id="id_capitulo"  name="id_capitulo"> {{$cap->capitulo}} </option>

 

value="{{$doc->id_capitulo}}" --> Aqui consigo ir buscar o ID certo . Vou dar o exemplo de ID 1

Depois quero que esse ID 1 vá buscar o nome do capitulo com ID1. 

Caso não tenha sido muito claro digam. 

 

Link to comment
Share on other sites

Se o $doc tem um campo

capitulo_id

, então cada documento pertence a um capítulo - o que não me parece fazer muito sentido, já que um capitulo é que deve pertencer a um documento, i.e., um documento tem vários capítulos. Ainda assim, este teu caso pode ser diferente.

Se assumirmos que cada capitulo pertence a 1 documento e que um document pode ter vários capítulos, então teremos, para um controlador que permite selecionar os capitulos de um documento com id

$docId

 algo como:

public function show($docId)
{
    $doc = Document::find($docId);
    return view('a minha view blade', ['doc' => $doc]);
}

depois na view 

 <label>Capitulo Associado</label>
 <select id="id_capitulo" name="id_capitulo" class="form-select" aria-label="Default select example">
   <option selected>Escolher Capitulo</option>
   @foreach($doc->capitulos as $cap)
       <option class="form-control" value="{{$cap->id}}"> {{$cap->nome_do_capitulo}} </option>
   @endforeach 
 </select>
 ...

Isto assume que a relação entre o modelo do doc (chamemos-lhe Document) e o do capitulo (chamemos-lhe Chapter) está criada e que na BD, a tabela capitulo tem um campo 

document_id
class Chapter extends Model 
{
  public function document(): BelongsTo
  {
    return $this->belongsTo(Document::class);
  }
}

class Document extends Model
{
  public function capitulos(): HasMany
  {
    return $this->hasMany(Chapter::class);
  }
}

// saber o Document a partir do Chapter
$document = $chapter->document;

// saber os capitulos (Collection) a partir do Document
$chapters = $document->capitulos;
  Edited by tiago.f
Link to comment
Share on other sites

Vê se estou a pensar de forma errada. 

Tenho a tabela capitulos e a tabela documentacao 
A tabela Capitulos é a principal por assim dizer, porque cada documento terá de pertencer a um capitulo 
-->Capitulo1 
--->Documento1
--->Documento2

 

Naquele select que estou a falar em cima :

{{$doc->id_capitulo}} é de um foreach da documentacao e o  {{$cap->capitulo}} pertence à tabela capitulo 

Link to comment
Share on other sites

A controller que tenho e onde vai buscar os dados da BD é : 

 

 public function index(){

        $capitulos = capitulo::orderby('id', 'desc')->paginate();
        return view('painel-admin.documentacao.index', compact('capitulos'));

    }

A tabela que mostra o Capitulo e os documentos dentro dos capitulos
 

div class="table-responsive">
  <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0">
    <thead>
    @foreach($capitulos as $cap)
                  <tr>
                    <th class="table-dark"> {{$cap->capitulo}}  </th>
                  </tr>
    </thead>
             
              <tbody>
              
              <tr>
               
                  <td> <b>Nome Ficheiro</b></td>
                  <td> <b>Versão</b></td>
                  <td> <b>Data ultima alteração</b></td>

              </tr>
                

              </tbody>

              <tbody>
              @foreach($cap->documentos as $doc)
              <tr>
               
                    <td><a href="{{url('storage',$doc->ficheiro)}}" target="_blank">  {{$doc->nome_ficheiro}} </a>  </td>
                    <td> {{$doc->versao}}  </td>
                    <td> {{$doc->data_ultima_alteracao}}  </td>

                  <td>
                  <a data-toggle="modal" data-target="#ModalPerfil3" href="{{route('documentacao.edit', $doc)}}" ><i class="fas fa-edit text-info mr-1"></i></a>
                  <a href="{{route('documentacao.modal', $doc)}}" ><i class="fas fa-trash text-danger mr-1"></i></a>
                  </td>
                
              </tr>
              @endforeach 

              </tbody>
            @endforeach   
          </table>
      </div>    
  </div>
  </div>

 

E onde quero mostrar o campo no select é na opção editar. Onde consulto o que estava anteriormente e posso ou não alterar. 

 

 <form id="form-perfil" method="POST" action="{{route('documentacao.editar2', $doc)}}" enctype="multipart/form-data">
                    @csrf
                    @method('put'):

                                            <div class="modal-body">

                            
                                    <div class="form-group">
                                        <label >Capitulo Associado</label>
                                        <select id="id_capitulo" name="id_capitulo" class="form-select" aria-label="Default select example">
                                            <option selected>Escolher Capitulo</option>
                                            @foreach($capitulos as $cap)
                                            <option class="form-control" value="{{$doc->id_capitulo}}" > {{$cap->capitulo}} </option>
                                            @endforeach 
                                            </select>
                                        </div>

                                    <div class="form-group">
                                        <label >Nome Ficheiro</label>
                                        <input value="{{$doc->nome_ficheiro}}" type="text" class="form-control" id="nome_ficheiro" name="nome_ficheiro" placeholder="Nome Ficheiro">
                                    </div>
 
Link to comment
Share on other sites

Então mas essa função index() mostra qual das views que colocaste aqui? (assumo que seja a 1ª). Onde está o controlador da 2ª view (a de Edit)?

 

Pelo que percebo queres deixar editar o Documento e permitir que se mude o capitulo a que pertence. Se for isso, o teu foreach deve iterar por todos os capitulos existentes e não por capitulos associados ao Documento em questão.

 

Assumindo que estás a passar para a view de edit algo como

return view('edit-document-view', ['doc' => $doc, 'capitulos' => capitulos::all()]);

então o teu select seria

<select id="id_capitulo" name="id_capitulo" class="form-select" aria-label="Default select example">
  <option selected>Escolher Capitulo</option>
  @foreach($capitulos as $cap)
  <option class="form-control" value="{{$cap->id}}" > {{$cap->capitulo}} </option>
  @endforeach 
</select>
</div>
 
Link to comment
Share on other sites

  • 5 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.