Stack Overflow em Português Asked by Willians Macena on November 5, 2021
Boa noite.
O que eu preciso é exibir o nome do livro onde está o seu id (na coluna Livro do form).
E para que eu não faça de uma maneira fora da convenção, gostaria de saber a maneira correta de fazer isso.
Tenho o método painel que está no controller HomeController que passa para minha view os objetos abaixo para formar a table:
public function painel(){
$livro = Livro::all();
$lote = Lote::all();
$status = Status::all();
return view('painel.index', compact('livro', 'lote', 'status'));
}
E também tenho o controller LoteController onde de lá eu precisaria passar pra essa mesma view ‘painel.index’ o nome do livro (livro->titulo) e não o id do livro que está na tabela de Lote (lote->livro_id).
Gostaria de saber qual a maneira correta para fazer tal procedimento. Se caso eu estiver errado na forma que estou fazendo, estou livre para aceitar as críticas para assim melhorar o meu código. Obrigado!
View painel.index:
div class="container">
<h1>Consulta de Lotes</h1>
<table class="table">
<thead class="thead-dark">
<tr>
<th>Lote</th>
<th>Livro</th>
<th>Data Início</th>
<th>Data de Encerramento</th>
</tr>
</thead>
<tbody>
@foreach ($lote as $lotes)
<tr>
<th>{{ $lotes->id }}</th>
<th>{{ $lotes->livro_id }}</th>
<th>{{ $lotes->dia_inicio }}</th>
<th>{{ $lotes->dia_fim }}</th>
</tr>
@endforeach
</tbody>
</table>
</div>
Se na sua migration de livros você criou o livro_id como chave estrangeira referenciando a tabela livros, basta vc criar o relacionamento no modelo lote e usar o relacionamento em qualquer lugar do sistema que vc precisar.
Na migration da tabela de lotes:
$table->unisignedInteger('livro_id');
$table->foregin('livro_id')->references('id')->on('livros')->onDelete('cascade');
Checa de o seu ID de livros foi criado com Integer ou BigInteger, a chave estrangeira tem que ser do mesmo tipo só que unsigned
No modelo de Lotes
public function livro() {
return $this->hasOne(Livro::class);
}
Depois, no controller que vc precisar vc faz a consulta:
$lotes = Lotes::with(['livro'])->get(); // o with aqui é opcional, vai evitar que na view o laravel faça outra consulta no banco
return view('painel.index', ['lotes' => $lotes]);
Na view
@foreach ($lotes as $lote)
<tr>
<td>{{ $lote->id }}</td>
<td>{{ $lote->livro->titulo }}</td> // se este for o compo da tabela livros que vc quer
<td>{{ $lotes->dia_inicio }}</td>
<td>{{ $lotes->dia_fim }}</td>
</tr>
@endforeach
Eu escrevi o código aqui e agora, pode ter algum errinho, mas, a ideia é essa...
Você ainda pode no modelo de livros ter um método que retorna todos os lotes usando hasMany (acho que é isso)
Answered by Luiz Lapetina on November 5, 2021
Pode fazer um join na consulta, exemplo:
$users = DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.*', 'contacts.phone', 'orders.price')
->get();
Answered by Munareto on November 5, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP