diff --git a/README.md b/README.md index 8310462..4298f51 100644 --- a/README.md +++ b/README.md @@ -59,3 +59,11 @@ Test method `test_show_roles_with_users()`. --- +## Task 5. BelongsToMany - Extra Fields in Pivot Table. + +In the route `/teams`, the table should show the teams with users, each user with a few additional fields. Fix the relationship definition in `app/Models/Team.php` so that the Blade file `tasks/index.blade.php` would show the correct data. + +Test method `test_teams_with_users()`. + +--- + diff --git a/app/Http/Controllers/TeamController.php b/app/Http/Controllers/TeamController.php new file mode 100644 index 0000000..04e26b6 --- /dev/null +++ b/app/Http/Controllers/TeamController.php @@ -0,0 +1,15 @@ +get(); + + return view('teams.index', compact('teams')); + } +} diff --git a/app/Models/Team.php b/app/Models/Team.php new file mode 100644 index 0000000..52cbeba --- /dev/null +++ b/app/Models/Team.php @@ -0,0 +1,20 @@ +belongsToMany(User::class); + } + +} diff --git a/database/migrations/2021_11_22_055456_create_teams_table.php b/database/migrations/2021_11_22_055456_create_teams_table.php new file mode 100644 index 0000000..eedd617 --- /dev/null +++ b/database/migrations/2021_11_22_055456_create_teams_table.php @@ -0,0 +1,32 @@ +id(); + $table->string('name'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('teams'); + } +} diff --git a/database/migrations/2021_11_22_055533_create_team_user_table.php b/database/migrations/2021_11_22_055533_create_team_user_table.php new file mode 100644 index 0000000..204a078 --- /dev/null +++ b/database/migrations/2021_11_22_055533_create_team_user_table.php @@ -0,0 +1,33 @@ +foreignId('team_id')->constrained(); + $table->foreignId('user_id')->constrained(); + $table->string('position'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('team_user'); + } +} diff --git a/resources/views/teams/index.blade.php b/resources/views/teams/index.blade.php new file mode 100644 index 0000000..a059b20 --- /dev/null +++ b/resources/views/teams/index.blade.php @@ -0,0 +1,14 @@ + diff --git a/routes/web.php b/routes/web.php index ceade0a..6c9f17a 100644 --- a/routes/web.php +++ b/routes/web.php @@ -24,3 +24,5 @@ Route::post('tasks', [TaskController::class, 'store'])->middleware('auth'); Route::get('users/{user}', [\App\Http\Controllers\UserController::class, 'show']); Route::get('roles', [\App\Http\Controllers\RoleController::class, 'index']); + +Route::get('teams', [\App\Http\Controllers\TeamController::class, 'index']); diff --git a/tests/Feature/RelationshipsTest.php b/tests/Feature/RelationshipsTest.php index d979579..10379ad 100644 --- a/tests/Feature/RelationshipsTest.php +++ b/tests/Feature/RelationshipsTest.php @@ -5,6 +5,7 @@ namespace Tests\Feature; use App\Models\Comment; use App\Models\Role; use App\Models\Task; +use App\Models\Team; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Support\Facades\DB; @@ -64,4 +65,23 @@ class RelationshipsTest extends TestCase $response = $this->get('/roles'); $response->assertStatus(200); } + + // TASK: pivot table with extra fields + public function test_teams_with_users() + { + $user = User::factory()->create(); + $team = Team::create(['name' => 'Team 1']); + $createdAt = now()->toDateTimeString(); + $position = 'Manager'; + DB::table('team_user')->insert([ + 'team_id' => $team->id, + 'user_id' => $user->id, + 'position' => $position, + 'created_at' => $createdAt + ]); + + $response = $this->get('/teams'); + $response->assertSee($createdAt); + $response->assertSee($position); + } }