silnex/gula

此包已被弃用且不再维护。未建议替代包。

Laravel for Gnuboard5

维护者

详细信息

github.com/SilNex/GuLa

源代码

问题

v1.3.2 2020-07-16 14:44 UTC

README

GuLa-logo

为Gnuboard5开发RESTful API的Laravel模型

安装

  1. 安装包 composer require silnex/gula
  2. .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)

如何使用

使用Laravel的Eloquent模型访问数据

<?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模型的关系,可以轻松地从其他表获取内容。

<?php
use SilNex\GuLa\Models\Gnu\G5Member;
$g5Member = new G5Member;

$admin = $g5Member->where('mb_id', '=', 'admin')->first();
$admin->g5Points()->get();

G5ModelFactory

在没有预先创建的Model或者需要从其他数据库中获取数据的情况下,可以通过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();
}

自动关系

在Gnuboard中,每当创建新的论坛时,都会自动创建以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_table

在Gnuboard创建论坛时,像g5_write_free这样的自动创建的表
可以通过 php artisan g5model:write {board} 命令创建 G5Model
默认情况下,已添加 wr_idwr_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();

在g5_board表中创建所有论坛

通过php artisan g5model:write-all命令可以自动创建Gnuboard的论坛模型。

待办事项

  • 添加Gnuboard模型
  • 添加批量赋值
  • 分离Gnuboard DB连接
  • 制作Logo(临时用)
  • 制作Logo(正式用)
  • 添加模型实例工厂
  • 添加模型间关系
  • 自动关系g5_write表
  • 添加自定义模型artisan:make命令
  • 添加批量生成DB中g5_write表模型的命令
  • 设置表别 primaryKey
  • 连接G5Write Model和G5BoardFile