
PHP ์จ๋ผ์ธ ๊ฐ์
>PHP - ๊ณ ๊ธ
๐ PHP ๊ณ ๊ธ - 2์ฃผ์ฐจ: ORM (Object-Relational Mapping) ํ์ฉ - 03 ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ (1:1, 1:N, N:M ๊ด๊ณ)
![]() |
ํ์ | 10.0 | ๋ผ์ด์ผ์ค | free |
---|---|---|---|---|
์ฌ์ฉ์ํ์ | 10.0 | ์ด์์ฒด์ | ||
๋ค์ด๋ก๋ | 1 | ํ์ผํฌ๊ธฐ | 0 | |
์ ์์ฌ | LUZENSOFT | ๋ฑ๋ก์ผ | 2025-09-05 15:03:25 | |
์กฐํ์ | 4 |
์ง๋ ์๊ฐ #๋ชจ๋ธ์ ์์ฑํ๊ณ #๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ์ด. ํ์ง๋ง ์ค์ ์๋น์ค์์๋ ์ฌ๋ฌ #ํ ์ด๋ธ์ด ๋ณต์กํ๊ฒ ์ฝํ ์์ง. ์ด๋ฒ ์๊ฐ์๋ #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/