diff --git a/README.md b/README.md index 1bf8d8e..6d054d6 100644 --- a/README.md +++ b/README.md @@ -33,90 +33,13 @@ Test method `test_user_create_task()`. --- -## Task 2. Get Data List. +## Task 2. BelongsTo with Empty Relationship. -In `app/Http/Controllers/UserController.php` file method `index()`, write Eloquent query to get 3 newest users with verified emails, ordered from newest to oldest. Transform this SQL query into Eloquent: +In the route `/tasks`, the table is loading with error, if it can't find the user related to the task. Fix this: the table should load and just show empty space in case of no user. -``` -select * from users where email_verified_at is not null order by created_at desc limit 3 -``` +There are multiple ways how to fix this, choose whichever way works for you. -Test method `test_get_filtered_list()`. +Test method `test_task_with_no_user()`. --- -## Task 3. Get a Single Record. - -In `app/Http/Controllers/UserController.php` file method `show($userId)`, fill in the `$user` value with finding the user by `users.id = $userId`. If the user is not found, show default Laravel 404 page. - -Test method `test_find_user_or_show_404_page()`. - ---- - -## Task 4. Get a Single Record or Create a New Record. - -In `app/Http/Controllers/UserController.php` file method `check_create()`, find the user by name and email. If the user is not found, create it (with random password). - -Test method `test_check_or_create_user()`. - ---- - -## Task 5. Create a New Record. - -In `app/Http/Controllers/ProjectController.php` file method `store()`, creating the project will fail. Fix the underlying issue, to make it work. - -Test method `test_create_project()`. - ---- - -## Task 6. Mass Update. - -In `app/Http/Controllers/ProjectController.php` file method `mass_update()`, write the update SQL query as Eloquent statement. - -``` -update projects set name = $request->new_name where name = $request->old_name -``` - -Test method `test_mass_update_projects()`. - ---- - -## Task 7. Update or New Record. - -In `app/Http/Controllers/UserController.php` file method `check_update()`, find a user by $name and update it with $email. If not found, create a user with $name, $email and random password - -Test method `test_check_or_update_user()`. - ---- - -## Task 8. Mass Delete Users. - -In `app/Http/Controllers/UserController.php` file method `destroy()`, delete all users by the array of `$request->users` - -Test method `test_mass_delete_users()`. - ---- - -## Task 9. Soft Deletes. - -In `app/Http/Controllers/ProjectController.php` file method `destroy()`, change Eloquent statement to still return the soft-deleted records in the list of `$projects` - -Test method `test_soft_delete_projects()`. - ---- - -## Task 10. Scopes with Filters. - -In `app/Http/Controllers/UserController.php` file method `only_active()`, make the main statement work and to filter records where email_verified_at is not null. - -Test method `test_active_users()`. - ---- - -## Task 11. Observers with New Record. - -In `app/Http/Controllers/ProjectController.php` file method `store_with_stats()`, create a separate Observer file with an event to perform a +1 in the stats table. - -Test method `test_insert_observer()`. - ---- diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index ab763ad..05073a4 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -2,10 +2,18 @@ namespace App\Http\Controllers; +use App\Models\Task; use Illuminate\Http\Request; class TaskController extends Controller { + public function index() + { + $tasks = Task::with('user')->paginate(); + + return view('tasks.index', compact('tasks')); + } + public function store(Request $request) { // TASK: find out why this sentence fails, and fix it in Eloquent Model diff --git a/app/Models/Task.php b/app/Models/Task.php index 888e3c6..01f6912 100644 --- a/app/Models/Task.php +++ b/app/Models/Task.php @@ -10,4 +10,9 @@ class Task extends Model use HasFactory; protected $fillable = ['name', 'users_id']; + + public function user() + { + return $this->belongsTo(User::class, 'users_id'); + } } diff --git a/database/migrations/2021_11_22_050733_create_tasks_table.php b/database/migrations/2021_11_22_050733_create_tasks_table.php index 7214adb..c136b79 100644 --- a/database/migrations/2021_11_22_050733_create_tasks_table.php +++ b/database/migrations/2021_11_22_050733_create_tasks_table.php @@ -16,7 +16,7 @@ class CreateTasksTable extends Migration Schema::create('tasks', function (Blueprint $table) { $table->id(); $table->string('name'); - $table->unsignedBigInteger('users_id'); + $table->unsignedBigInteger('users_id')->nullable(); $table->foreign('users_id')->references('id')->on('users'); $table->timestamps(); }); diff --git a/resources/views/tasks/index.blade.php b/resources/views/tasks/index.blade.php new file mode 100644 index 0000000..8d22941 --- /dev/null +++ b/resources/views/tasks/index.blade.php @@ -0,0 +1,5 @@ + diff --git a/routes/web.php b/routes/web.php index 70595fa..c22a86d 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,7 @@ middleware('auth'); +Route::get('tasks', [TaskController::class, 'index']); +Route::post('tasks', [TaskController::class, 'store'])->middleware('auth'); diff --git a/tests/Feature/RelationshipsTest.php b/tests/Feature/RelationshipsTest.php index e364d06..b2088da 100644 --- a/tests/Feature/RelationshipsTest.php +++ b/tests/Feature/RelationshipsTest.php @@ -2,6 +2,7 @@ namespace Tests\Feature; +use App\Models\Task; use App\Models\User; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; @@ -19,4 +20,13 @@ class RelationshipsTest extends TestCase ]); $response->assertStatus(200); } + + // TASK: this table throws an error, fix it + public function test_task_with_no_user() + { + Task::create(['name' => 'Some task']); + + $response = $this->get('/tasks'); + $response->assertStatus(200); + } }