Laravel의 with method는 relation된 다른 테이블의 값을 함께 가져올 때 사용된다.
다만 이번 프로젝트에서 users 테이블의 연결된 logs의 timestamp 값 (created_at, updated_at)을 가져오고 싶었는데 hidden으로 감추기엔 모두 사용되는 값이였고, 그렇다고 모두 가져오기엔 필요없는 데이터와, 유저에게 표시되면 안되는 부분도 있어서 생성일만 가져오는게 제일인 상황에서 아래와 같이 코드를 짰었다.
리펙토링을 하는중에 가만 생각해보니 Raw로 쿼리를 짯을 땐 select로 원하는것만 가져오면되는데, 이걸 또 with으로 가져오다보니 select를 따로 하려면 callback을 짜야하는데 간단히 select 정도만 하면되는데 콜백으로 가독성이 더 떨어질까 생각하는 와중에 with에서 callback없이 원하는 column만 가져올 수 있는 방법을 찾앗다.
GuL(a)ibrary (이하 구라블러리 ㅎ)는 sir.kr에서 만든 그누보드와 영카트의 테이블의 모델들을 묶어둔 라이브러리입니다. 바로 DB를 바꿀순 없고 api, scheduler등 더 다양한 기능들을 기존 그누보드, 영카트를 유지하면서 laravel로 구현하기 위해 만들어졌습니다.
실은 그누보드로 만들어진 사이트 서로 연동 하는 작업하는데 raw php론 너무 힘들어서 만들엇습니다. ㅎ
특징
구라블러리는 그누보드와 Laravel에서 사용할 DB를 따로 분리하여 운영이 가능합니다. 구라브러리는 Laravel의 relation을 그누보드 DB에서 사용할수 있습니다. 구라브러리는 G5ModelFactory를 통해 모델이 존재하지 않는 경우 runtime상에서 인스턴스 생성이 가능합니다. 구라브러리는 그누보드에서 생성된 g5_write_ 테이블을 G5Member 모델을 통해 자동으로 연결해줍니다,
모두 구랍니다
설치
composer require silnex/gula
.env
GULA_DB_HOST=gnuboard.db.host
GULA_DB_PORT=3306 # (default: 3306)
GULA_DB_DATABASE=gnuboard_db
GULA_DB_USERNAME=gnuboard_db_user
GULA_DB_PASSWORD=gnuboard_db_pass
GULA_CHARSET=utf8mb4 # DB 문자셋 (default: utf8mb4)
GULA_COLLATION=utf8mb4_unicode_ci # DB 문자셋 (default: utf8mb4_unicode_ci)
위처럼 env를 설정하여 그누보드와 Laravel의 DB를 각각 운영하실 수 있습니다.
예제
<?php
// 그누보드
use SilNex\GuLa\Models\Gnu\G5Member;
$g5Member = new G5Member;
$g5Member->all();
$g5Member->where('mb_id', '=', 'admin');
// 영카트
use SilNex\GuLa\Models\Young\G5ShopItem;
$g5ShopItem = new G5ShopItem;
$g5ShopItem->all();
관계-Relationships
Laravel을 쓰면서 가장 마음에 들었엇고 또 가장 많이 사용하는 Relation도 넣었습니다. 다만 그누보드는 외래키가 따로 존재하지않고 mb_id 등 AI를 이용한 검색도 하지 않아 직접(…) 각각의 모델에 넣어줬습니다.
한땀한땀….
<?php
use SilNex\GuLa\Models\Gnu\G5Member;
$g5Member = new G5Member;
$admin = $g5Member->where('mb_id', '=', 'admin')->first();
$admin->g5Points()->get();
위에 구현을 통해 계정을 가져온 다음 계정의 포인트를 가져오는 식의 활용이 가능합니다.
G5ModelFactory
그누보드는 게시판에 따라 각각 테이블을 만드는데 이때 만들어진 테이블을 아래의 커스텀 모델로 만들어 사용할 수도 있지만, 코드상으로 factory를 통해 생성할 수 있습니다.
<?php
// Anywhere
use SilNex\GuLa\G5ModelFactory;
// ['connection', 'table_name']
$G5WriteFree = new G5ModelFactory(['gula', 'g5_write_free']);
$G5WriteFree->get();
그누보드 게시판 자동연동
구라이브러리는 그누보드에서 생성되는 g5_write_로 시작하는 게시판 테이블을 G5Member 모델을 통해서 자동으로 연동해줍니다.