위어드섹터 공식 블로그

[백엔드 / PHP - Laravel] Eloquent ORM 을 사용하여 DB에 데이터 삽입, 조회 방법 본문

Developing/백엔드

[백엔드 / PHP - Laravel] Eloquent ORM 을 사용하여 DB에 데이터 삽입, 조회 방법

위어드섹터 2022. 10. 18. 14:26

데이터를 저장하는 방법은 크게 2가지가 있습니다(레지스터, 캐시 제외). 주기억장치(RAM, ROM)에 저장하는 방법과 보조기억장치(HDD, SSD)에 저장하는 방법이 있습니다. 

 

주기억장치 중에서 RAM은 CPU의 연산 작업을 하기 위한 작업공간으로 프로세스가 끝나게 되면 데이터가 휘발되는 특성이 있습니다. ROM은 전원이 끊어져도 데이터를 저장하고 읽을 수 있지만, 데이터가 수정이 안 되는 특성이 있습니다. 따라서 데이터를 수정할 수 있고, 많은 양의 데이터를 물리적으로 보관하고 싶다면 보조기억장치에 저장하면 되는데 오늘 그 방법에 대해 알아보겠습니다.

 

출처: https://mindstation.tistory.com/152



PHP 언어에서 DB에 데이터를 넣어보겠습니다.

먼저 php와 mysql를 연결한 후, SQL query 를 직접 입력하는 방법입니다. 

그 예시는 다음과 같습니다.

 

 
<?php
$conn = mysqli_connect("localhost", "root", "123456", "opentutorials");
$sql = 
"INSERT INTO topic ( title, description, created) VALUES ( 'MySQL', 'MySQL is ....', NOW() )";


$result = mysqli_query($conn, $sql);


if ($result === false) {
   echo mysqli_error($conn);
}
?>

 

출처: https://opentutorials.org/course/3167/19591



하지만 이 방법은 PHP 코드에 SQL문을 직접 삽입하는 방법으로써 다음과 같은 단점이 있습니다.

 

  1. 코드의 가독성이 안좋아지는 문제. 
  2. PHP 코드로 DB의 테이블 간의 관계를 유추하기 어려운 관계 

 

그래서 찾아본 개념이 바로 ORM입니다. 



ORM이란?



Object Relational Mapping(객체-관계-매핑)의 약자로 객체와 데이터베이스의 관계를 매핑해주는 도구입니다. 즉, 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하면서 객체 모델과 관계형 모델 간에 불일치가 존재하는데 ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결합니다.

 

출처: https://hanamon.kr/orm%EC%9D%B4%EB%9E%80-nodejs-lib-sequelize-%EC%86%8C%EA%B0%9C/

 

https://gmlwjd9405.github.io/2019/02/01/orm.html



Laravel에서는 Eloquent ORM을 사용합니다.



<Eloquent ORM 사용법>



** 데이터를 DB에 insert 하기 위한 방법 **

 

예시) 한 명의 user가 여러 댓글을 남긴 경우.



  1. Model에 관계를 정해주기.

 

한명의 user가 여러 개의 댓글(tasks)을 남길 수 있으므로 1:N 관계에 속합니다.

따라서 User model에 다음과 같은 메소드로 관계를 명시합니다.

 

    public function tasks() {
        return $this->hasMany(Task::class);
    }

 

 

2. Controller 에서 request->all() 을 통해 받은 데이터를 배열에 담습니다. 여기서 하나의 배열은 DB에서 하나의 row와 일치합니다. 따라서 여러 개의 row을 넣을 경우, 2차원 배열을 넣으면 됩니다.

 
        for ($i = 0; $i < count($input_data['address']); $i++) {
            array_push($temp, [
                'address' => $input_data['address'][$i],
                'source' => request()->input('source'),

 

 

3. 다음과 같은 메소드로 한 번에 여러 개의 row를 DB에 넣을 수 있습니다. 

 

auth()->user()->tasks()->createMany($temp);

 

** 데이터를 DB에서 읽어오는 방법 **

 

데이터를 DB에서 user id 별로 읽어올 때는 

 

$tasks = DB::table("tasks")->where("user_id", $user_id)->get();

 

와 같이 읽어올 수 있습니다.



ORM을 사용해보니, php의 전체 코드가 객체지향적인 코드로 더 직관적이고, SQL문을 직접 사용하지 않아 편리하고, 가독성이 높아지는 장점을 느낄 수 있었습니다.




블로그 구독자 문의 주소 : info@weirdsector.co.kr

그로스 해킹 파트너, LABBIT 바로가기

LABBIT을 운영하는 Team 위어드섹터 만나러 가기