---
title: Laravel [03] (Relacions 1aN)
tags: daw, Laravel, migrations, M7
---
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Licencia de Creative Commons" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png" /></a><br />Este obra está bajo una <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional</a>.
[Enllaç a Hackmk.io](https://hackmd.io/@JdaXaviQ/H1m28_2-n)
## Laravel [03] (Relacions 1aN).
### Migracions amb relacions 1-N:
Per aquest nou lliurament crearem un nou projecte, relacions1aN, però aprofitarem la base de dades __relacions__ que varem utilitzar amb les rel·lacions 1a1.
```bash=
isard@ubuntu:~/src$ composer create-project laravel/laravel relacions1aN
```
`
Ens farem dues migracions noves una per a empleats i una altra per a projectes:
```basch=
php artisan make:migration create_projectes_table
php artisan make:migration create_empleats_table
```
Modifiquem els arxius resultants per a afegir els camps que necessitem:
```php=
public function up()
{
Schema::create('projectes', function (Blueprint $table) {
$table->id();
$table->string('nom_proj');
$table->float('preu', 10, 2);
$table->timestamps();
});
}
public function up()
{
Schema::create('empleats', function (Blueprint $table) {
$table->id();
$table->string('nom_empl');
$table->string('cognom_empl');
$table->float('sou', 8, 2);
$table->unsignedBigInteger('projecte_id');
$table->foreign('projecte_id')->references('id')->on('projectes');
$table->timestamps();
});
}
```
I podem procedir a migrar:
```bash=
php artisan migrate
INFO Running migrations.
2023_04_16_084400_create_projectes_table ...... 25ms DONE
2023_04_16_084406_create_empleats_table ....... 25ms DONE
```
Ara toca generar els models de les nostres taules:
```bash=
php artisan make:model Empleat
php artisan make:model Projecte
```
Com que en aquest cas la clau forana està a empleats, farem la rel·lació directa a la taula projectes, però enlloc d'utilitzar la funció 'hasOne()' farem servir la funció 'hasMany()':
```php=
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Projecte extends Model
{
use HasFactory;
public function empleats() {
return $this->hasMany(Empleat::class);
}
}
```
I la rel·laciól inversa al model Empleat:
```php=
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Empleat extends Model
{
use HasFactory;
public function projecte() {
return $this->belongsTo(Projecte::class);
}
}
```
Ara només queda modificar el fitxer de rutes __web.php__ com habiem fet amb les rel·lacions 1a1.
```php=
<?php
use Illuminate\Support\Facades\Route;
use App\Models\Empleat;
use App\Models\Projecte;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Route::get('/projectes/{id}', function($id){
return Projecte::find($id);
});
Route::get('/projectes/{id}/empleats', function($id){
return Projecte::find($id)->empleats;
});
Route::get('/empleats/{id}', function($id){
return Empleat::find($id);
});
Route::get('/empleats/{id}/projecte', function($id){
return Empleat::find($id)->projecte;
});
```