mirror of
https://github.com/10h30/Test-Eloquent-Relationships.git
synced 2026-06-05 15:07:42 +09:00
Task 2 - no relationship
This commit is contained in:
@@ -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()`.
|
||||
|
||||
---
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<ul>
|
||||
@foreach ($tasks as $task)
|
||||
<li>{{ $task->name }} ({{ $task->user->name }})</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
+3
-2
@@ -1,6 +1,7 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use App\Http\Controllers\TaskController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -17,5 +18,5 @@ Route::get('/', function () {
|
||||
return view('welcome');
|
||||
});
|
||||
|
||||
Route::post('tasks', [\App\Http\Controllers\TaskController::class, 'store'])
|
||||
->middleware('auth');
|
||||
Route::get('tasks', [TaskController::class, 'index']);
|
||||
Route::post('tasks', [TaskController::class, 'store'])->middleware('auth');
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user