PHP 프레임워크 – Laravel – 4 – 모델과 데이터베이스

PHP 프레임워크 - Laravel - 4 - 모델과 데이터베이스
PHP 프레임워크 – Laravel – 4 – 모델과 데이터베이스

PHP 프레임워크 – Laravel – 모델과 데이터베이스

안녕하세요, 개발자 여러분~ 😊
Laravel에서 웹 개발을 할 때 빠질 수 없는 요소가 바로 **모델(Model)**과 **데이터베이스(Database)**입니다.

지금까지는 화면을 구성하는 뷰와 컨트롤러를 다뤘다면,
이번 시간에는 실제 데이터를 다루는 부분, 즉 Laravel의 심장이라고도 할 수 있는
모델과 데이터베이스의 연결, 사용법에 대해 자세히 배워볼 거예요!

Laravel은 **Eloquent ORM(Object-Relational Mapping)**이라는 정말 강력한 기능을 제공해서,
마치 마법처럼 SQL 없이도 데이터 조작이 가능해진답니다! 🧙‍♂️✨


모델(Model)이란?

모델은 데이터베이스 테이블과 연결되어 데이터를 표현하고 조작하는 클래스입니다.
Laravel에서는 이 모델을 통해 객체 지향 방식으로 데이터베이스를 다룰 수 있어요.

💡 비유하자면?

모델은 데이터베이스의 ‘통역가’ 같아요.
SQL이라는 복잡한 언어 대신, 모델이 알아서 적절한 쿼리로 바꿔주는 역할을 하죠!


Eloquent ORM 소개

Eloquent는 Laravel에 내장된 ORM(Object-Relational Mapping) 시스템으로,
데이터베이스 레코드를 객체로 표현하고,
객체 조작만으로 데이터베이스 작업이 가능하게 해줍니다.


모델 생성 방법

artisan 명령어로 쉽게 모델을 생성할 수 있어요.

php artisan make:model Post

app/Models/Post.php 파일이 생성됩니다.


기본 모델 구조

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // 모델과 연결된 테이블 이름은 기본적으로 소문자 복수형: 'posts'
}

별도 설정이 없으면, posts라는 테이블과 연결된다고 자동 인식돼요.


데이터베이스 설정 (.env 파일)

Laravel에서는 .env 파일을 통해 DB 설정을 합니다.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

.env를 수정한 후에는 서버를 재시작하거나 캐시를 리셋해줘야 적용돼요:

php artisan config:clear

마이그레이션(Migrations)이란?

Laravel에서는 데이터베이스 테이블을 코드로 정의하고 생성할 수 있는데,
이를 **마이그레이션(Migration)**이라고 합니다.

php artisan make:migration create_posts_table

이 명령을 실행하면 database/migrations/ 경로에 파일이 하나 생성됩니다.

예시 마이그레이션 파일

public function up()
{
    Schema::create('posts', function (Blueprint $table) {
        $table->id();
        $table->string('title');
        $table->text('content');
        $table->timestamps(); // created_at, updated_at 자동 생성
}

실행 방법

php artisan migrate

데이터베이스 삽입 (Create)

모델을 통해 아주 간단하게 데이터를 저장할 수 있어요.

use App\Models\Post;

$post = new Post;
$post->title = '첫 번째 글';
$post->content = 'Laravel 모델은 정말 쉬워요!';
$post->save();

혹은 단축형으로:

Post::create([
    'title' => '두 번째 글',
    'content' => 'create 메서드를 사용하면 더 간편하죠!',
]);

※ 단, 이 경우에는 모델에 fillable 속성을 정의해야 해요!

protected $fillable = ['title', 'content'];

데이터 조회 (Read)

모든 레코드 가져오기

$posts = Post::all();

조건 조회

$post = Post::where('id', 1)->first();

특정 레코드 찾기

$post = Post::find(1);

데이터 수정 (Update)

$post = Post::find(1);
$post->title = '수정된 제목입니다!';
$post->save();

데이터 삭제 (Delete)

$post = Post::find(1);
$post->delete();

Eloquent의 다양한 기능

기능 예시 설명
정렬 Post::orderBy('created_at', 'desc')->get(); 최신 글 먼저
페이징 Post::paginate(10); 10개씩 페이지 나누기
관계 설정 $user->posts() hasMany, belongsTo 등
조건 쿼리 Post::where('title', 'like', '%라라벨%')->get(); 검색 기능 구현

Eloquent 관계(Relationships) 예시

Laravel은 데이터베이스 테이블 간의 관계도 객체 지향적으로 표현할 수 있어요!

예: 사용자(User)와 글(Post)의 관계

User 모델

public function posts()
{
    return $this->hasMany(Post::class);
}

Post 모델

public function user()
{
    return $this->belongsTo(User::class);
}

이제 이렇게 쓸 수 있어요:

$user = User::find(1);
$user->posts; // 유저가 작성한 모든 글

$post = Post::find(1);
$post->user; // 글 작성자 정보

시더(Seeder)로 더미 데이터 생성하기

Laravel에서는 테스트용 데이터를 자동으로 생성하는 기능도 있어요.

시더 생성

php artisan make:seeder PostSeeder

내용 작성

public function run()
{
    \App\Models\Post::factory()->count(10)->create();
}

실행

php artisan db:seed --class=PostSeeder

주의할 점 ✅

항목 주의사항
fillable create() 사용 시 반드시 fillable 필드 설정 필요
마이그레이션 순서 테이블 간 관계가 있으면 생성 순서 주의
캐시 삭제 .env 변경 후 php artisan config:clear 필수
id 직접 입력 X auto-increment 필드를 수동으로 지정하지 않기
모델과 테이블명 모델 단수형, 테이블 복수형으로 자동 매핑됨 (예: Post → posts)

요약 🎯

개념 설명
모델 DB와 연결된 객체
Eloquent Laravel ORM, SQL 없이 객체로 DB 조작 가능
마이그레이션 테이블을 코드로 정의하고 생성
CRUD create, read, update, delete 모두 메서드 제공
관계 정의 hasOne, hasMany, belongsTo 등 다양한 관계 표현 가능

마무리하며 😊

Laravel의 Eloquent 모델과 마이그레이션을 이해하면
웹 애플리케이션의 데이터 흐름이 정말 쉬워져요!

모델을 통해 데이터베이스를 마치 객체처럼 자유롭게 다룰 수 있는 즐거움을 느껴보세요.
Laravel은 그 과정을 최대한 단순하고 아름답게 만들어줍니다 🌟

다음 시간에는 **폼 처리와 데이터 유효성 검사(Validation)**를 함께 알아볼게요!
그럼 오늘도 멋진 코딩 되시길 바랍니다~ 💻💡✨

답글 남기기