Curso de Laravel para Noobs - #17 Models VIII [HasMany]
04/07/2023Na aula de hoje aprenderemos como usar o relacionamento de um pra muitos dentro do Laravel, o famoso hasMany.
hasMany no Laravel
No Laravel, o relacionamento "hasMany" é usado para representar uma relação de um-para-muitos entre dois modelos. Ele permite que um modelo tenha vários registros associados em outro modelo.
Criando os models
Iniciaremos criando dois models, um para pedidos e outro para os itens relacionados a este pedido:
php artisan make:model Pedido -mcr
php artisan make:model PedidoItems -mcr
Migrations
As migrations serão responsáveis pela criaçao das tabelas pedidos e pedido_items no nosso banco.
public function up()
{
Schema::create('pedidos', function (Blueprint $table) {
$table->id();
$table->integer('numero');
$table->timestamps();
});
}
public function up()
{
Schema::create('pedido_items', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->unsignedBigInteger('pedido_id');
$table->foreign('pedido_id')->references('id')->on('pedidos');
$table->timestamps();
});
}
Não esqueça de depois rodar o comando:
php artisan migrate
routes/web.php
Criaremos uma rota get para testarmos o relacionamento:
Route::get('/pedidos',[\App\Http\Controllers\PedidoController::class,'index'])->name('pedidos.index');
app/Models/Pedido.php
No models Pedido implementaremos a função relatedItems que trará a relação hasMany (um pedido para muitos items):
public function relatedItems()
{
return $this->hasMany(PedidoItems::class,'pedido_id','id');
}
Repare no código acima que o primeiro parâmetro é o outro model do relacionamento, o segundo parametro é a chave estrangeira e o terceiro parâmetro é a chave local do model Pedido.
app/Http/Controllers/PedidoController.php
Vamos criar agora o método que vai fazer o relacionamento hasMany entre as duas tabelas:
public function index()
{
$pedidos = Pedido::orderBy('id')->get();
foreach ($pedidos as $pedido){
echo $pedido->numero.'<br>';
foreach($pedido->relatedItems as $item){
echo $item->name.'<br>';
}
echo '<hr>';
}
}
Por hoje é só! Fiquem todos com Deus! Sucesso nos códigos e na vida!
Precisa de um guia? webdesignemfoco@gmail.com