안녕하세요 라라벨에서 데이터베이스 사용법에 대해 알아보도록 하겠습니다.
우선 라라벨에서 현재 4가지의 데이터베이스를 지원하고 있습니다.
- MySQL
- PostgreSQL
- SQLite
- SQL Server
데이터베이스를 연결하는 방법은 config/database.php으로 가서 원하는 데이터베이스를 작성해주시면됩니다.
예제를 보겠습니다.
'mysql' => [
'read' => [
'host' => ['192.168.1.1'],
],
'write' => [
'host' => ['196.168.1.2'],
],
'sticky' => true,
'driver' => 'mysql',
'database' => 'database',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
],
위의 예제는 라라벨공식홈페이지의 예제입니다.
read와 write를 설정할수 있으며, 하나로 통일 하고싶은 경우는 read,write를 사용하지않고,
host => 192.168.1.2를 이용하여 바로 연결시켜 사용하면 됩니다.
기본쿼리에 대해 알아보도록 하겠습니다.
select
DB::select('select * from users where active = ?', [1]);
insert
DB::select('select * from users where id = :id', ['id' => 1]);
update
DB::update('update users set votes = 100 where name = ?', ['John']);
delete
DB::delete('delete from users');
위의 기본쿼리들을 보시면 DB파사드를 이용하고 있으며 select, insert update 구문은, ?를 이용하여 좀더 인수로써 이용 하는 것을 알수있습니다.
또한 DB파사드에는 트랜잭션이 존재합니다.
예제를 살펴보겠습니다.
try {
DB::transaction(function() use() {
// query작성
})
}catch(Exception $e) {
}
try catch문을 이용하면 더욱 좋습니다.
트랜잭션의 클로져안에서 쿼리가 완벽하게 다 진행되었다면, 그대로 커밋을 할것이며, 실패한다면, rollback을 할 것입니다.
또한 주목할점은 보통 트랜잭션의 클로져에서는 클로져밖의 변수는 사용할수 없습니다.
아래의 예제를 보시면
try {
$name = "hello"
DB::transaction(function() use($name) {
DB::select("select * from users where name=?", [$name])
})
}catch(Exception $e) {
}
use()를 사용함으로써, 밖에서 사용하던 변수라도 클로져 안에서 사용할수 있도록 합니다.
다음으로 쿼리빌더에 대해 알아보도록 하겠습니다.
쿼리빌더
쿼리빌더는 PDO 파라미터 바인딩을 사용하여 SQL injection 공격을 방지를 위해 사용할수 있으며, sql을 간단하게 작성할수 있습니다.
예제를 들어보겠습니다.
DB::table("test")->get(); // 모든 데이터 조회
DB::table("test")->first(); // 하나의 데이터만 조회
DB::table("test")->where("id","3")->get(); // where문 사용하여 해당되는 데이터 모두 조회
DB::table("test")->join("test2","test2.id","=","test.id")->get(); // join문을 사용을 사용하여 모든 데이터 조회
위의 예제들을 보시면 알수 있지만, 쿼리빌더를 이용함으로써 복잡한 sql문이 보다 간결히 작성 되는 것을 알수 있습니다.
위의 간단한 예제뿐만아니라 더욱 더 많은 기능들이 있습니다.
https://laravel.kr/docs/5.8/queries
나머지 기능들은 공식 홈페이지를 통해 알아보시면 될듯 합니다. :)
'IT' 카테고리의 다른 글
HTTP헤더 인젝션 (0) | 2019.05.15 |
---|---|
[laravel 기초공부] 라라벨 - 06 (뷰 블레이드- 기본) (0) | 2019.05.13 |
[laravel 기초공부] 라라벨 - 04 (라우팅 미들웨어) (0) | 2019.05.08 |
[laravel 기초공부] 라라벨 - 03 (서비스 프로바이더 파사드) (0) | 2019.05.07 |
[laravel 기초공부] 라라벨 - 02 (서비스 컨테이너) (1) | 2019.05.06 |