From 24325939177e8dbf7088e25d21d2c09ece92ddc5 Mon Sep 17 00:00:00 2001 From: Abdalrhman-Jabri Date: Wed, 25 Sep 2024 20:30:55 +0300 Subject: [PATCH] First attempt --- app/Http/Controllers/CountryController.php | 2 +- app/Http/Controllers/ProjectController.php | 4 +++- app/Http/Controllers/UserController.php | 4 +++- app/Models/Attachment.php | 1 + app/Models/Role.php | 2 +- app/Models/Task.php | 8 ++++++-- app/Models/Team.php | 2 +- app/Models/User.php | 11 +++++++---- 8 files changed, 23 insertions(+), 11 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..fbf064eb 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -10,7 +10,9 @@ 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..c265b663 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -8,7 +8,9 @@ class UserController extends Controller { public function index() { - $users = User::all(); + $users = User::query() + ->has('projects', '>=', 1) + ->get(); return view('users.index', compact('users')); } diff --git a/app/Models/Attachment.php b/app/Models/Attachment.php index 158b6470..b899a4c4 100644 --- a/app/Models/Attachment.php +++ b/app/Models/Attachment.php @@ -14,5 +14,6 @@ class Attachment extends Model public function attachable() { // 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..24099baa 100644 --- a/app/Models/Role.php +++ b/app/Models/Role.php @@ -14,6 +14,6 @@ class Role extends Model public function users() { // TASK: fix this by adding a parameter - return $this->belongsToMany(User::class); + return $this->belongsToMany(User::class, 'users_roles'); } } diff --git a/app/Models/Task.php b/app/Models/Task.php index 01f6912d..7a95f90e 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -4,6 +4,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; class Task extends Model { @@ -11,8 +12,11 @@ class Task extends Model protected $fillable = ['name', 'users_id']; - public function user() + public function user(): BelongsTo { - return $this->belongsTo(User::class, 'users_id'); + return $this->belongsTo(User::class, 'users_id') + ->withDefault([ + 'name' => '' + ]); } } diff --git a/app/Models/Team.php b/app/Models/Team.php index 13969525..7dddf11a 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)->withPivot(['position', 'created_at', 'updated_at']); } } diff --git a/app/Models/User.php b/app/Models/User.php index 3d7facd2..e88f494a 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -4,10 +4,13 @@ use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; +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; + class User extends Authenticatable { use HasApiTokens, HasFactory, Notifiable; @@ -42,15 +45,15 @@ 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', 'task_id'); } public function projects()