From 4cfaba2ade007e3e5fae74b4443bd4ddb738a2cb Mon Sep 17 00:00:00 2001 From: comfort Date: Fri, 18 Oct 2024 05:15:13 +0200 Subject: [PATCH] Completed all the Elequent Relationship Tasks --- app/Http/Controllers/CountryController.php | 2 +- app/Http/Controllers/ProjectController.php | 3 +++ app/Http/Controllers/UserController.php | 2 +- app/Models/Attachment.php | 5 +++-- app/Models/Role.php | 5 +++-- app/Models/Team.php | 2 +- app/Models/User.php | 22 ++++++++++++++++------ resources/views/tasks/index.blade.php | 4 ++-- 8 files changed, 30 insertions(+), 15 deletions(-) diff --git a/app/Http/Controllers/CountryController.php b/app/Http/Controllers/CountryController.php index 2b9be507..e0cf38c3 100644 --- a/app/Http/Controllers/CountryController.php +++ b/app/Http/Controllers/CountryController.php @@ -9,7 +9,7 @@ class CountryController extends Controller public function index() { // TASK: load the relationship average of team size - $countries = Country::all(); + $countries = Country::withAvg('teams', 'size')->get(); return view('countries.index', compact('countries')); } diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index e04fb1a6..12cf9c15 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers; +use Auth; use Illuminate\Http\Request; class ProjectController extends Controller @@ -11,6 +12,8 @@ public function store(Request $request) // TASK: Add one sentence to save the project to the logged-in user // by $request->project_id and with $request->start_date parameter + Auth::user()->projects()->attach($request->project_id, ['start_date' => $request->start_date]); + return 'Success'; } } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 7ae1d3d6..b97f4a1c 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -8,7 +8,7 @@ class UserController extends Controller { public function index() { - $users = User::all(); + $users = User::has('projects')->get(); return view('users.index', compact('users')); } diff --git a/app/Models/Attachment.php b/app/Models/Attachment.php index 158b6470..accc4822 100644 --- a/app/Models/Attachment.php +++ b/app/Models/Attachment.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\MorphTo; class Attachment extends Model { @@ -11,8 +12,8 @@ class Attachment extends Model protected $fillable = ['filename', 'attachable_id', 'attachable_type']; - public function attachable() + public function attachable() : MorphTo { - // TASK: fill in the code to make it work + return $this->morphTo(); } } diff --git a/app/Models/Role.php b/app/Models/Role.php index c2f3fc89..b3227630 100644 --- a/app/Models/Role.php +++ b/app/Models/Role.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Role extends Model { @@ -11,9 +12,9 @@ class Role extends Model protected $fillable = ['name']; - public function users() + public function users() : BelongsToMany { // TASK: fix this by adding a parameter - return $this->belongsToMany(User::class); + return $this->belongsToMany(User::class, 'users_roles'); } } diff --git a/app/Models/Team.php b/app/Models/Team.php index 13969525..ba089c28 100644 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -14,7 +14,7 @@ class Team extends Model public function users() { // TASK: fix this by adding some extra code - return $this->belongsToMany(User::class); + return $this->belongsToMany(User::class, 'created_at', 'position'); } } diff --git a/app/Models/User.php b/app/Models/User.php index 3d7facd2..f8f36da1 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -2,8 +2,12 @@ namespace App\Models; +use DB; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; +use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Database\Eloquent\Relations\HasManyThrough; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; @@ -42,19 +46,25 @@ class User extends Authenticatable 'email_verified_at' => 'datetime', ]; - public function tasks() + public function tasks() : HasMany { // TASK: fix this by adding a parameter - return $this->hasMany(Task::class); + return $this->hasMany(Task::class, 'users_id'); } - public function comments() + public function comments() : HasManyThrough { - // TASK: add the code here for two-level relationship + return $this->hasManyThrough( + Comment::class, + Task::class, + 'users_id' + ); } - public function projects() + public function projects() : BelongsToMany { - return $this->belongsToMany(Project::class)->withPivot('start_date'); + return $this->belongsToMany(Project::class) + ->withPivot('start_date'); } + } diff --git a/resources/views/tasks/index.blade.php b/resources/views/tasks/index.blade.php index 8d229417..0498c118 100644 --- a/resources/views/tasks/index.blade.php +++ b/resources/views/tasks/index.blade.php @@ -1,5 +1,5 @@ + \ No newline at end of file