그누보드로 RESTfull api 개발을 위한 Laravel Models
- 패키지 설치
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)
<?php
// 그누보드
use SilNex\GuLa\Models\Gnu\G5Member;
$g5Member = new G5Member;
$g5Member->where('mb_id', '=', 'admin')->get();
// 영카트
use SilNex\GuLa\Models\Young\G5ShopItem;
$g5ShopItem = new G5ShopItem;
$g5ShopItem->get();
자세한 사용법은 Laravel Eloquent 문서를 참고
Laravel의 모델의 Relation을 사용해 다른 테이블의 내용을 쉽게 가져올 수 있습니다.
<?php
use SilNex\GuLa\Models\Gnu\G5Member;
$g5Member = new G5Member;
$admin = $g5Member->where('mb_id', '=', 'admin')->first();
$admin->g5Points()->get();
미리 생성된 Model이 없는 경우나, 다른 DB에서 가져올 경우 G5ModelFactory
를 통해 Model 인스턴스를 생성할 수 있습니다.
<?php
// Anywhere
use SilNex\GuLa\G5ModelFactory;
// ['connection', 'table_name']
$g5WriteFree = new G5ModelFactory(['gula', 'g5_write_free']);
$g5WriteFree->get();
혹은 이를 응용해 다음과 같은 방법도 가능합니다.
<?php
use SilNex\GuLa\G5ModelFactory;
use Illuminate\Support\Str;
$notExistsModel = "\SilNex\GuLa\Gnu\G5WriteFree";
if (!class_exists($notExistsModel)) {
$model = explode('\\', $notExistsModel);
$table = Str::snake(end($model));
$g5WriteFree = new G5ModelFactory(['gula', $table]);
$g5WriteFree->get();
}
그누보드에선 새로운 게시판을 만들때 마다 g5_write_
으로 시작하는 테이블이 생성됩니다.
GuLa에선 이를 자동으로 릴레이션 해줍니다.
테이블 이름이 소문자, _, 숫자인 경우에만 자동 인식이 가능합니다.
<?php
use SilNex\GuLa\Models\Gnu\G5Member;
var_dump(class_exists("\SilNex\GuLa\Gnu\G5WriteFree")); // bool(false)
$g5Member = new G5Member;
$admin = $g5Member->where('mb_id', '=', 'admin')->first();
$admin->g5WriteFree()->first(); // g5_write_free의 mb_id가 admin인 게시글을 가져옵니다.
// 여러 테이블에서 가져올 수 있습니다.
$admin->with('g5WriteFree', 'g5WriteNotice', 'g5WriteQa')->get();
커스텀 모델을 직접 만들지 않고 커맨드로 생성 할 수 있습니다.
커맨드 php artisan g5model:write {table_name}
를 입력하면 app/G5Models
에 모델이 생성 됩니다.
php artisan g5model:write my_g5_custom_table
/** app/G5Models/MyG5CustomTable.php */
<?php
namespace App\G5Models;
use SilNex\GuLa\G5Model;
class MyG5CustomTable extends G5Model
{
protected $table = 'my_g5_custom_table';
// ... 그외 MyG5CustomTable에 필요한 사항들
}
그누보드의 게시판 생성시 g5_write_free
와 같은 자동생성되는 테이블들은
php artisan g5model:write {board}
를 통해서 G5Model
을 생성 할 수 있습니다.
기본적으로 wr_id
와 wr_parent
의 릴레이션이 추가되어있어 바로 사용하실 수 있습니다.
php artisan g5model:write free
/** app/G5Models/G5WriteFree.php */
<?php
namespace App\G5Models;
use SilNex\GuLa\G5Model;
class G5WriteFree extends G5Model
{
use \SilNex\GuLa\Traits\BelongToG5Member;
protected $table = 'g5_write_free';
// ... 그외 G5WriteFree에 필요한 사항들
/**
* 댓글 리스트
*/
public function comments()
{
return $this->hasMany(G5WriteFree::class, 'wr_parent', 'wr_id')->where('wr_is_comment', '=', '1');;
}
/**
* 댓글이라면, 게시글을 보여줌
*/
public function parent()
{
if ($this->wr_is_comment) {
return $this->belongsTo(G5WriteFree::class, 'wr_id', 'wr_parent')->where('wr_is_comment', '=', '0');;
} else {
throw new \Exception("해당 글은 댓글이 아닙니다.");
}
}
/**
* 게시판에 첨부된 파일을 가져옴
*/
public function files()
{
return $this->hasMany(G5BoardFile::class, 'wr_id', 'wr_id')->where('bo_table', $this->bo_table);
}
}
// Using
$g5WriteFree = new G5WriteFree;
$g5WriteFree->comments();
$g5WriteFree->first()->files();
php artisan g5model:write-all
명령어를 통해 자동으로 그누보드의 게시판 모델을 생성해 줄수 있습니다.
- 그누보드 모델 추가
- Mass Assignment 추가
- 그누보드 DB connection 분리
- 로고제작 (임시용)
- 로고제작 (정식용)
- 모델 인스턴스 팩토리 추가
- 모델별 릴레이션 추가
- g5_write 테이블 자동 릴레이션
- 커스텀 모델 artisan:make 커맨드 추가
- DB에 있는 g5_write_ 테이블 모델 일괄 생성 커맨드 추가
- 테이블별 primaryKey 설정
- G5Write Model과 G5BoardFile의 연결