์จ๋ผ์ธ ๊ฐ์
>PHP - ๊ณ ๊ธ
๐ PHP ๊ณ ๊ธ - 2์ฃผ์ฐจ: ORM (Object-Relational Mapping) ํ์ฉ - 03 ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ (1:1, 1:N, N:M ๊ด๊ณ)
				์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
 - ๋ผ์ด์ ์ค: free
 - ์ด์์ฒด์ :
 - ํ์ผ ํฌ๊ธฐ: 0
 
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
 - ๋ค์ด๋ก๋ ์: 1
 - ์กฐํ์: 52
 
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
 - ๋ฑ๋ก์ผ: 2025-09-05 15:03:25
 
- ์ค๋ช
์ง๋ ์๊ฐ #๋ชจ๋ธ์ ์์ฑํ๊ณ #๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ด. ํ์ง๋ง ์ค์  ์๋น์ค์์๋ ์ฌ๋ฌ #ํ ์ด๋ธ์ด ๋ณต์กํ๊ฒ ์ฝํ ์์ง. ์ด๋ฒ ์๊ฐ์๋ #ORM์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ธ #ํ ์ด๋ธ ๊ฐ #๊ด๊ณ ๊ด๋ฆฌ๋ฅผ ์ดํด๋ณผ ๊ฑฐ์ผ. #Eloquent #ORM์ ์ฌ์ฉํด์ #1:1, #1:N, #N:M ๊ด๊ณ๋ฅผ ์ ์ํ๊ณ #๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
1. 1:1 ๊ด๊ณ (One to One)
1:1 ๊ด๊ณ๋ ํ๋์ #ํ
์ด๋ธ ๋ ์ฝ๋๊ฐ ๋ค๋ฅธ ํ๋์ #ํ
์ด๋ธ ๋ ์ฝ๋์ ์ ํํ ์ฐ๊ฒฐ๋๋ ๊ด๊ณ๋ฅผ ๋งํด. ์๋ฅผ ๋ค์ด, User #ํ
์ด๋ธ๊ณผ Profile #ํ
์ด๋ธ์ด ์๋ค๊ณ  ๊ฐ์ ํด๋ณด์. ํ ๋ช
์ ์ฌ์ฉ์๋ ํ๋์ ํ๋กํ๋ง์ ๊ฐ์ง ์ ์์ด.
1-1. ๊ด๊ณ ์ ์
1:1 ๊ด๊ณ๋ฅผ ์ ์ํ๋ ค๋ฉด ๋ #๋ชจ๋ธ ๋ชจ๋์ #๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ผ ํด. User #๋ชจ๋ธ์์ Profile์ ์ ๊ทผํ๋ #๋ฉ์๋๋ hasOne๋ฅผ, Profile #๋ชจ๋ธ์์ User์ ์ ๊ทผํ๋ #๋ฉ์๋๋ belongsTo๋ฅผ ์ฌ์ฉํด.
PHP
<?php
// app/Models/User.php
use IlluminateDatabaseEloquentModel;
class User extends Model
{
    /**
     * ์ฌ์ฉ์๋ ํ๋์ ํ๋กํ์ ๊ฐ์ง๋๋ค.
     */
    public function profile()
    {
        return $this->hasOne(Profile::class);
    }
}
PHP
<?php
// app/Models/Profile.php
use IlluminateDatabaseEloquentModel;
class Profile extends Model
{
    /**
     * ํ๋กํ์ ํ ๋ช
์ ์ฌ์ฉ์์๊ฒ ์ํฉ๋๋ค.
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
1-2. ๊ด๊ณ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ๊ทผ
๊ด๊ณ๊ฐ ์ ์๋๋ฉด ์ด์  #๋ฐ์ดํฐ๋ฅผ #์์ฑ์ฒ๋ผ ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ด.
PHP
<?php
$user = User::find(1); // id๊ฐ 1์ธ ์ฌ์ฉ์ ์กฐํ
echo $user->profile->phone_number; // ์ฌ์ฉ์์ ํ๋กํ ์ ํ๋ฒํธ์ ์ ๊ทผ
$profile = Profile::find(1); // id๊ฐ 1์ธ ํ๋กํ ์กฐํ
echo $profile->user->name; // ํ๋กํ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์ ๊ทผ
2. 1:N ๊ด๊ณ (One to Many)
1:N ๊ด๊ณ๋ ํ๋์ ๋ ์ฝ๋๊ฐ ๋ค๋ฅธ ์ฌ๋ฌ ๊ฐ์ ๋ ์ฝ๋์ ์ฐ๊ฒฐ๋๋ ๊ด๊ณ์ผ. ์๋ฅผ ๋ค์ด, ํ ๋ช
์ User๋ ์ฌ๋ฌ ๊ฐ์ Post๋ฅผ ์์ฑํ  ์ ์์ง.
2-1. ๊ด๊ณ ์ ์
1:N ๊ด๊ณ์์ #1์ ํด๋นํ๋ #User #๋ชจ๋ธ์ hasMany #๋ฉ์๋๋ฅผ, #N์ ํด๋นํ๋ #Post #๋ชจ๋ธ์ belongsTo #๋ฉ์๋๋ฅผ ์ฌ์ฉํด.
PHP
<?php
// app/Models/User.php
use IlluminateDatabaseEloquentModel;
class User extends Model
{
    /**
     * ์ฌ์ฉ์๋ ์ฌ๋ฌ ๊ฐ์ ๊ฒ์๋ฌผ์ ๊ฐ์ง๋๋ค.
     */
    public function posts()
    {
        return $this->hasMany(Post::class);
    }
}
PHP
<?php
// app/Models/Post.php
use IlluminateDatabaseEloquentModel;
class Post extends Model
{
    /**
     * ๊ฒ์๋ฌผ์ ํ ๋ช
์ ์ฌ์ฉ์์๊ฒ ์ํฉ๋๋ค.
     */
    public function user()
    {
        return $this->belongsTo(User::class);
    }
}
2-2. ๊ด๊ณ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ๊ทผ
์ด์  User #๋ชจ๋ธ์์ ๋ชจ๋  #๊ฒ์๋ฌผ์ ์กฐํํ๊ฑฐ๋, #๊ฒ์๋ฌผ #๋ชจ๋ธ์์ ์์ฑ์์ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ด.
PHP
<?php
$user = User::find(1);
foreach ($user->posts as $post) {
    echo $post->title; // ์ฌ์ฉ์์ ๋ชจ๋  ๊ฒ์๋ฌผ ์ ๋ชฉ ์ถ๋ ฅ
}
$post = Post::find(5);
echo $post->user->name; // ๊ฒ์๋ฌผ ์์ฑ์ ์ด๋ฆ ์ถ๋ ฅ
3. N:M ๊ด๊ณ (Many to Many)
N:M ๊ด๊ณ๋ ์์ชฝ ๋ชจ๋ ์ฌ๋ฌ ๊ฐ์ ๋ ์ฝ๋์ ์ฐ๊ฒฐ๋๋ ๊ด๊ณ์ผ. ์๋ฅผ ๋ค์ด, ํ ๋ช
์ User๋ ์ฌ๋ฌ ๊ฐ์ Role์ ๊ฐ์ง ์ ์๊ณ , ํ๋์ Role์ ์ฌ๋ฌ ๋ช
์ User์๊ฒ ํ ๋น๋  ์ ์์ง. #N:M ๊ด๊ณ๋ ๋ณดํต ์ค๊ฐ์ **ํผ๋ฒ #ํ
์ด๋ธ(Pivot Table)**์ ์ฌ์ฉํด. (์: role_user #ํ
์ด๋ธ)
3-1. ๊ด๊ณ ์ ์
N:M ๊ด๊ณ๋ ์์ชฝ ๋ชจ๋ belongsToMany #๋ฉ์๋๋ฅผ ์ฌ์ฉํด.
PHP
<?php
// app/Models/User.php
use IlluminateDatabaseEloquentModel;
class User extends Model
{
    /**
     * ์ฌ์ฉ์๋ ์ฌ๋ฌ ์ญํ ์ ๊ฐ์ง ์ ์์ต๋๋ค.
     */
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}
PHP
<?php
// app/Models/Role.php
use IlluminateDatabaseEloquentModel;
class Role extends Model
{
    /**
     * ์ญํ ์ ์ฌ๋ฌ ์ฌ์ฉ์์๊ฒ ํ ๋น๋  ์ ์์ต๋๋ค.
     */
    public function users()
    {
        return $this->belongsToMany(User::class);
    }
}
3-2. ๊ด๊ณ๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ๊ทผ ๋ฐ ์กฐ์
N:M ๊ด๊ณ์์๋ #๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ ์ธ์ #์ฐ๊ฒฐ(attach), #์ฐ๊ฒฐ ํด์ (detach), #๊ฐฑ์ (sync) ๊ฐ์ ํน๋ณํ #๋ฉ์๋๋ฅผ ์ฌ์ฉํ  ์ ์์ด.
PHP
<?php
$user = User::find(1);
// ์ญํ  ํ ๋น
$user->roles()->attach(3); // id 3๋ฒ ์ญํ  ํ ๋น
// ๋ชจ๋  ์ญํ  ์กฐํ
foreach ($user->roles as $role) {
    echo $role->name; // ์ฌ์ฉ์์ ๋ชจ๋  ์ญํ  ์ด๋ฆ ์ถ๋ ฅ
}
// ํน์  ์ญํ ๋ง ์ฐ๊ฒฐ (๊ธฐ์กด ์ฐ๊ฒฐ์ ๋ชจ๋ ๋์)
$user->roles()->sync([1, 2]); // id 1, 2๋ฒ ์ญํ ๋ง ์ฐ๊ฒฐ
๋น ๋ฅธ์๋, ๊ฐํธํ์ฌ์ฉ, ์ฅ์ ์๋VPN, ์ฌ์ฉ์ด๋ ฅ์๋ ๊นจ๋ํ ์์ดํผ
https://xn--299ao67b9qbmsf04c.net/