silnex / gula
此包已被弃用且不再维护。未建议替代包。
Laravel for Gnuboard5
v1.3.2
2020-07-16 14:44 UTC
Requires
- laravel/framework: ^7.0
Requires (Dev)
- orchestra/testbench: ^5.0
This package is auto-updated.
Last update: 2023-06-29 22:49:13 UTC
README
为Gnuboard5开发RESTful API的Laravel模型
安装
- 安装包
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)
如何使用
使用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_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();
在g5_board表中创建所有论坛
通过php artisan g5model:write-all命令可以自动创建Gnuboard的论坛模型。
待办事项
- 添加Gnuboard模型
- 添加批量赋值
- 分离Gnuboard DB连接
- 制作Logo(临时用)
- 制作Logo(正式用)
- 添加模型实例工厂
- 添加模型间关系
- 自动关系g5_write表
- 添加自定义模型artisan:make命令
- 添加批量生成DB中g5_write表模型的命令
- 设置表别 primaryKey
- 连接G5Write Model和G5BoardFile
