간단한 todo list를 통해 흐름을 알아보려 한다.
composer create-project laravel/laravel todo-app
cd todo-app
DB_DATABASE=todo
DB_USERNAME=root
DB_PASSWORD=secret
php artisan make:model Todo -mcr
// database/migrations/xxxx_create_todos_table.php
public function up()
{
Schema::create('todos', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->boolean('completed')->default(false);
$table->timestamps();
});
}
php artisan migrate
down()을 따로 작성하지 않은 이유
- down()은 명시적으로 커스텀할 필요가 없을 경우, 그대로 두면 충분하다.
- 단, up()에서 복잡한 작업(컬럼 추가/변경 등)을 했다면, 그에 맞춰 down()도 커스터마이징하는 게 좋다.
헬퍼 함수
- id() 메서드 자체가 BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY를 자동으로 생성해주는 전용 헬퍼 함수입니다.
- 그러므로 별도 primary key를 지정을 하지 않아도 자동으로 지정된다.
// routes/web.php
use App\Http\Controllers\TodoController;
Route::get('/todos', [TodoController::class, 'index']);
Route::post('/todos', [TodoController::class, 'store']);
Route::put('/todos/{id}', [TodoController::class, 'update']);
Route::delete('/todos/{id}', [TodoController::class, 'destroy']);
// app/Http/Controllers/TodoController.php
use App\Models\Todo;
use Illuminate\Http\Request;
class TodoController extends Controller
{
public function index() {
return Todo::all();
}
public function store(Request $request) {
return Todo::create($request->validate([
'title' => 'required|string|max:255',
]));
}
public function update(Request $request, $id) {
$todo = Todo::findOrFail($id);
$todo->update($request->only(['title', 'completed']));
return $todo;
}
public function destroy($id) {
Todo::destroy($id);
return response()->json(['message' => '삭제 완료']);
}
}
// app/Models/Todo.php
class Todo extends Model
{
protected $fillable = ['title', 'completed'];
}
php artisan tinker
>>> \App\Models\Todo::create(['title' => 'Laravel 배우기']);
<!-- Blade -->
<form method="POST" action="/todos">
@csrf
<input name="title" />
<button type="submit">추가</button>
</form>
app/
┣ Models/
┃ ┗ Todo.php
┣ Http/
┃ ┗ Controllers/
┃ ┗ TodoController.php
routes/
┗ web.php
database/
┣ migrations/
┃ ┗ xxxx_create_todos_table.php
resources/
┗ views/
┗ todos.blade.php (선택)
| 단계 | 목적 |
|---|---|
| 프로젝트 생성 | Laravel 세팅 |
| 모델/마이그레이션 | DB 테이블 및 ORM 정의 |
| 컨트롤러/라우팅 | RESTful API 구성 |
| View 또는 API | 실제 UI나 클라이언트 연동 |
| 테스트 데이터 | 개발 중 확인용 |