---
# System prepended metadata

title: 'Laravel [03] (Relacions 1aN)'
tags: [' M7', ' migrations', daw, ' Laravel']

---

---
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;
});
```

