klasss Posted November 27, 2021 at 10:14 AM Report Share #624725 Posted November 27, 2021 at 10:14 AM 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 More sharing options...
tiago.f Posted November 27, 2021 at 10:27 AM Report Share #624726 Posted November 27, 2021 at 10:27 AM Oi. Primeiro deves remover o I’d=“..” e o name=“…” dos <options>. Apenas o <select> deve ter um name=“…” Quanto ao id do capítulo, assumindo que criaste a relação belongsTo no model Doc, deves fazer {{ $doc->capitulo->campo_com_o_nome_do_capitulo }} Link to comment Share on other sites More sharing options...
klasss Posted November 27, 2021 at 02:53 PM Author Report Share #624728 Posted November 27, 2021 at 02:53 PM No model não criei isso. Na BD as tabelas estão relacionadas. {{ $doc->capitulo->campo_com_o_nome_do_capitulo }} $doc é do foreach -> id_do campo capitulo -> e o Capitulo da outra tabela que contem o nome. Link to comment Share on other sites More sharing options...
tiago.f Posted November 27, 2021 at 03:50 PM Report Share #624729 Posted November 27, 2021 at 03:50 PM (edited) 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 November 27, 2021 at 03:52 PM by tiago.f Link to comment Share on other sites More sharing options...
klasss Posted November 27, 2021 at 09:22 PM Author Report Share #624730 Posted November 27, 2021 at 09:22 PM 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 More sharing options...
tiago.f Posted November 27, 2021 at 09:54 PM Report Share #624731 Posted November 27, 2021 at 09:54 PM Ok. Então é ao contrário… os meus exemplos acima mantêm-se, mas onde se lê document deve ler-se chapter e vice-versa. se quiseres colocar aqui o código da classe controlador e da view, facilita a ajuda. Link to comment Share on other sites More sharing options...
klasss Posted November 28, 2021 at 12:23 PM Author Report Share #624734 Posted November 28, 2021 at 12:23 PM 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 More sharing options...
tiago.f Posted November 28, 2021 at 01:00 PM Report Share #624735 Posted November 28, 2021 at 01:00 PM 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 More sharing options...
pedrox Posted December 27, 2021 at 09:42 PM Report Share #625084 Posted December 27, 2021 at 09:42 PM Penso que o problema aqui se resolvia usando eager load: `Doc::find(id)->with('capitulo')` e ai irias ter o DOC com a relação de capítulos já carregada sem precisares de fazer duas queries. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now