메뉴 건너뛰기

enjoyTools.net

Doctrine DBAL 메모

2017.10.27 02:18

꿈돌이 조회 수:249

몇년 지났지만, 간단하게 볼 수 있는 글이 있다.

https://www.thedevfiles.com/2014/08/simplifying-database-interactions-with-doctrine-dbal/

 

아니면 매뉴얼.

http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/index.html

 


/* Driver Manager 상속 - 안됨. */

 

use Doctrine\DBAL;

use Doctrine\DBAL\DriverManager;

 

/* DriverManager 클래스는 final 선언되어 상속이 안된다.

db 클래스를 별도로 만드는 경우 상속하지 말고 아래처럼 한다. */

 

class db

{

    public static $instance;

 

    public static function getInstance()

    {

        if (!isset(self::$instance)) {

            self::$instance = DriverManager::getConnection([

                'driver' => 'pdo_mysql',

                'dbname' => 'mydbname',

                'host' => 'localhost',

                'user' => 'myusername',

                'password' => 'mypassword',

                'charset' => 'utf8',

                'port' => 13306

            ]);

        }

        return self::$instance;

    }

}

 


 

쿼리 빌더 사용시 생성된 SQL 확인

echo $que->getSql();

 

쿼리 빌더 실행 및 결과 취득

$que->execute()->fetchAll();

 

fetchAll 제외한 나머지 블라블라들은 쿼리빌더에 없는 메서드라고 나오던데 뭔 일인지는 잘 모르겠고,

블라블라는 아래 링크들을 참고한다.

http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#using-prepared-statements

http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manipulation.html#fetchall

 


 

select 과정은 아래와 같이 쿼리빌더를 먼저 준비 후, 실행

$que = $db->createQueryBuilder();

 

insert, update, delete 등은 쿼리빌더 준비 없이 $db 객체에서 바로 입력 후, 실행

$db->insert("테이블명", [데이터 배열]);

 

하거나 아니면 쿼리빌더에서 준비 후 select와 동일하게 트리거 시킴

 


 

DB 연결 종료

$db->close();

 


 

테이블 생성

$db = db::getInstance();

$sm = $db->getSchemaManager();

 

$table = new Doctrine\DBAL\Schema\Table("`${table_name}`");

$table->addColumn("id", "integer", array("length" => 11, "unsigned" => true, "null" => false));

$table->addColumn("name", "string", array("length" => 50));

$table->setPrimaryKey(array("id"));

 

$sm->createTable($table);

 

 

테이블 이름 변경

$db = db::getInstance();

$sm = $db->getSchemaManager();

 

$sm->renameTable("`${old_name}`", "`${new_name}`");

 

테이블 삭제

$db = db::getInstance();

$sm = $db->getSchemaManager();

 

$sm->dropTable("`${new_name}`");