Wallogit.com
2017 © Pedro Peláez
EasyModel
定义一个model 继承EasyModel, (*1)
namespace App\Models;
use Agxmaster\EasyModel\EasyModel;
class Pirates extends EasyModel
{
public $table = 'pirates';
public $primaryKey = 'piratesid';
}
定义仓库, (*2)
namespace App\Repositories; use Agxmaster\EasyModel\EasyModel; use App\Models\Menu; use App\Models\Pirates; class PiratesRepository { function test(){ $menu = new Menu(); $pirates = new Pirates(); $easy = new EasyModel(); } }
以下实例都在仓库中, (*3)
所有的查询开头必须是get后面接各种参数 get后面不接参数但是方法传参会用model里面primaryKey属性查询
$r = $pirates->get(1);
output:, (*4)
Array
(
[0] => Array
(
[piratesid] => 1
[name] => 路飞
[order] => 1
[reward] => 2147483647
[devilnutid] => 1
[position] => 船长
[sword] => 999999
[fight] => 橡胶jet、橡胶图章
)
)
get后面不接参数方法不传参查全表数据
$r = $pirates->get();
output:, (*5)
Array
(
[0] => Array
(
[piratesid] => 1
[name] => 路飞
[order] => 1
[reward] => 2147483647
[devilnutid] => 1
[position] => 船长
[sword] => 999999
[fight] => 橡胶jet、橡胶图章
)
[1] => Array
(
[piratesid] => 2
[name] => 索罗
[order] => 2
[reward] => 2000000000
[devilnutid] => 0
[position] => 武士、杂工
[sword] => 888888
[fight] => 三刀流
),
...
)
方法的最后一个字母用来代表格式 方法名大写字母R结尾代表取一维数组
$r = $pirates->getR(2);
output:, (*6)
Array
(
[piratesid] => 2
[name] => 索罗
[order] => 2
[reward] => 2000000000
[devilnutid] => 0
[position] => 武士、杂工
[sword] => 888888
[fight] => 三刀流
)
方法名大写字母K结尾代表这种数据结构
$r = $pirates->getK(2);
output:, (*7)
Array
(
[2] => Array
(
[piratesid] => 2
[name] => 索罗
[order] => 2
[reward] => 2000000000
[devilnutid] => 0
[position] => 武士、杂工
[sword] => 888888
[fight] => 三刀流
)
)
方法名大写字母F结尾代表这种数据结构 在用model做查询时必须定义两个属性primaryKey、table 例如上面的 Pirates 在用model做查询时get后面直接想接的是字段比如 要查询 name、age两个字段 getNameAge()
$r = $pirates->getNameF(2);
output:, (*8)
索罗
L关键字代表limit L2_2 代表 limit 2,2, L2 代表 limit 2
$r = $pirates->getNamePositionL2_2();
output:, (*9)
Array
(
[0] => Array
(
[name] => 娜美
[position] => 航海士
)
[1] => Array
(
[name] => 罗宾
[position] => 历史学家
)
)
By关键字后面接的是查询条件
$r = $pirates->getNamePositionByDevilnutidL2_1(1);
output:, (*10)
Array
(
[0] => Array
(
[name] => 乔巴
[position] => 船医
)
)
写easymodel的目的有几个 1.方便查询数据可以避开建立model和写简单sql这种枯燥无味的工作 2.最求书写的流畅,写一段代码很不情愿停下来去做另一段代码 多表查询会有点变态方法名略长,如果不喜欢文档后面有传参方式替代
silbings 表示一对一的关联关系这种配置查询出的数据没有层级关系 subbing 表示一对多的关联关系这种配置有层级关系 last为生成最后一层数据的key 先看一对一关系的查询
return [
'siblings' => [
'pirates,devilnut,devilnuttype' => [
['pirates'=>'piratesid','devilnut'=>'owner'],
['devilnuttype'=>'devilnuttypeid','devilnut'=>'devilnuttypeid'],
]
]
];
get后面直接接多个表名 如果多个表在配置文件中能找到怎返回结果
$r = $easy->getPiratesDevilnutDevilnuttype();
output:, (*11)
Array
(
[0] => Array
(
[piratesid] => 1
[name] => 路飞
[order] => 1
[reward] => 2147483647
[devilnutid] => 1
[position] => 船长
[sword] => 999999
[fight] => 橡胶jet、橡胶图章
[devilnuttypeid] => 1
[devilnutname] => 橡胶果实
[color] => 橡胶果实..
[owner] => 1
[devilnutdescript] => 黄色
[devilnuttyptename] => 超人系
[devilnuttypedescript] => 超人系....
)
[1] => Array
(
[piratesid] => 4
[name] => 罗宾
[order] => 4
[reward] => 80000000
[devilnutid] => 2
[position] => 历史学家
[sword] => 666666
[fight] => 手
[devilnuttypeid] => 1
[devilnutname] => 花花果实
[color] => 花花果实..
[owner] => 4
[devilnutdescript] => 黄色
[devilnuttyptename] => 超人系
[devilnuttypedescript] => 超人系....
)
)
return [
'siblings' => [
// 'pirates,devilnut,devilnuttype' => [
// ['pirates'=>'piratesid','devilnut'=>'owner'],
// ['devilnuttype'=>'devilnuttypeid','devilnut'=>'devilnuttypeid'],
// ]
],
'subbing' => [
'pirates,devilnut,devilnuttype' => [
'keys' =>[
['pirates'=>'piratesid','devilnut'=>'owner'],
['devilnuttype'=>'devilnuttypeid','devilnut'=>'devilnuttypeid']
],
'last' => 'devilnuttypeid'
]
]
];
get后面直接接多个表名如果多个表在配置文件中能找到怎返回结果
$r = $easy->getPiratesDevilnutDevilnuttype();
output:, (*12)
Array
(
[1] => Array
(
[piratesid] => 1
[name] => 路飞
[order] => 1
[reward] => 2147483647
[devilnutid] => 4
[position] => 船长
[sword] => 999999
[fight] => 橡胶jet、橡胶图章
[child] => Array
(
[1] => Array
(
[devilnutid] => 1
[devilnuttypeid] => 1
[devilnutname] => 橡胶果实
[color] => 橡胶果实..
[owner] => 1
[devilnutdescript] => 黄色
[child] => Array
(
[1] => Array
(
[devilnuttypeid] => 1
[devilnuttyptename] => 超人系
[devilnuttypedescript] => 超人系....
[child] =>
)
)
)
[3] => Array
(
[devilnutid] => 4
[devilnuttypeid] => 3
[devilnutname] => 火火果实
[color] => 火火果实..
[owner] => 1
[devilnutdescript] => 红色
[child] => Array
(
[3] => Array
(
[devilnuttypeid] => 3
[devilnuttyptename] => 自然系
[devilnuttypedescript] => 自然系....
[child] =>
)
)
)
)
)
[4] => Array
(
[piratesid] => 4
[name] => 罗宾
[order] => 4
[reward] => 80000000
[devilnutid] => 2
[position] => 历史学家
[sword] => 666666
[fight] => 手
[child] => Array
(
[1] => Array
(
[devilnutid] => 2
[devilnuttypeid] => 1
[devilnutname] => 花花果实
[color] => 花花果实..
[owner] => 4
[devilnutdescript] => 黄色
[child] => Array
(
[1] => Array
(
[devilnuttypeid] => 1
[devilnuttyptename] => 超人系
[devilnuttypedescript] => 超人系....
[child] =>
)
)
)
)
)
[5] => Array
(
[piratesid] => 5
[name] => 乔巴
[order] => 5
[reward] => 20000000
[devilnutid] => 3
[position] => 船医
[sword] => 222222
[fight] => 变身
[child] => Array
(
[2] => Array
(
[devilnutid] => 3
[devilnuttypeid] => 2
[devilnutname] => 人人果实
[color] => 人人果实..
[owner] => 5
[devilnutdescript] => 蓝色
[child] => Array
(
[2] => Array
(
[devilnuttypeid] => 2
[devilnuttyptename] => 动物系
[devilnuttypedescript] => 动物系....
[child] =>
)
)
)
)
)
)
By后面接表名然后接表的字段
如有User、Group两张表 User表有Name、age字段则可写为 getUserGroupByUserNameAge('agx','28')
$r = $easy->getPiratesDevilnutDevilnuttypeByPiratespiratesid(1);
output:, (*13)
Array
(
[1] => Array
(
[piratesid] => 1
[name] => 路飞
[order] => 1
[reward] => 2147483647
[devilnutid] => 4
[position] => 船长
[sword] => 999999
[fight] => 橡胶jet、橡胶图章
[child] => Array
(
[1] => Array
(
[devilnutid] => 1
[devilnuttypeid] => 1
[devilnutname] => 橡胶果实
[color] => 橡胶果实..
[owner] => 1
[devilnutdescript] => 黄色
[child] => Array
(
[1] => Array
(
[devilnuttypeid] => 1
[devilnuttyptename] => 超人系
[devilnuttypedescript] => 超人系....
[child] =>
)
)
)
[3] => Array
(
[devilnutid] => 4
[devilnuttypeid] => 3
[devilnutname] => 火火果实
[color] => 火火果实..
[owner] => 1
[devilnutdescript] => 红色
[child] => Array
(
[3] => Array
(
[devilnuttypeid] => 3
[devilnuttyptename] => 自然系
[devilnuttypedescript] => 自然系....
[child] =>
)
)
)
)
)
)
get后面接多表然后接需要查询的表然后接该表的多个字段
如果查某表全部字段则可只写表名后面不接该表字段
虽然很长但是写着很爽
如有User、Group两张表User表有Name、age字段Group表有 groupid字段则可写为 getUserGroupUserNameAgeGroupGroupid('agx','28')
$r = $easy->getPiratesDevilnutDevilnuttypePiratesPiratesidNameDevilnutDevilnuttypeByPiratespiratesid(1);
output:, (*14)
Array
(
[1] => Array
(
[piratesid] => 1
[name] => 路飞
[child] => Array
(
[1] => Array
(
[devilnutid] => 1
[devilnuttypeid] => 1
[devilnutname] => 橡胶果实
[color] => 橡胶果实..
[owner] => 1
[devilnutdescript] => 黄色
[child] => Array
(
[1] => Array
(
[devilnuttypeid] => 1
[devilnuttyptename] => 超人系
[devilnuttypedescript] => 超人系....
[child] =>
)
)
)
[3] => Array
(
[devilnutid] => 4
[devilnuttypeid] => 3
[devilnutname] => 火火果实
[color] => 火火果实..
[owner] => 1
[devilnutdescript] => 红色
[child] => Array
(
[3] => Array
(
[devilnuttypeid] => 3
[devilnuttyptename] => 自然系
[devilnuttypedescript] => 自然系....
[child] =>
)
)
)
)
)
)
$r = $easy->getPiratesDevilnutDevilnuttypePiratesPiratesidNameDevilnutDevilnuttypeByPiratespiratesidL0_1(1);
output:, (*15)
Array
(
[1] => Array
(
[piratesid] => 1
[name] => 路飞
[child] => Array
(
[1] => Array
(
[devilnutid] => 1
[devilnuttypeid] => 1
[devilnutname] => 橡胶果实
[color] => 橡胶果实..
[owner] => 1
[devilnutdescript] => 黄色
[child] => Array
(
[1] => Array
(
[devilnuttypeid] => 1
[devilnuttyptename] => 超人系
[devilnuttypedescript] => 超人系....
[child] =>
)
)
)
)
)
)
比如配置里面有 a,b,c 则对 a b表查询则可用该项配置
$r = $easy ->getPiratesDevilnutL0_1();
output:, (*16)
Array
(
[1] => Array
(
[piratesid] => 1
[name] => 路飞
[order] => 1
[reward] => 2147483647
[devilnutid] => 1
[position] => 船长
[sword] => 999999
[fight] => 橡胶jet、橡胶图章
[child] => Array
(
[1] => Array
(
[devilnutid] => 1
[devilnuttypeid] => 1
[devilnutname] => 橡胶果实
[color] => 橡胶果实..
[owner] => 1
[devilnutdescript] => 黄色
[child] =>
)
)
)
)
需要在model里面定义 config属性
<?php
namespace App\Models;
use Agxmaster\EasyModel\EasyModel;
class Menu extends EasyModel
{
public $table = 't_menu';
public $config = [
'top' => '000',
'id' => 'menuid',
'parentid' => 'parentid',
'sort' => 'sort',
];
}
尾字母大写T代表这种数据格式
$r = $easy ->getMenuidParentidMenu_nameT();
output:, (*17)
Array
(
[9bc0436b-ee7d-30a1-b691-8d940a6d4d2c] => Array
(
[menuid] => 9bc0436b-ee7d-30a1-b691-8d940a6d4d2c
[parentid] => 000
[menu_name] => 咨询管理
[child] => Array
(
[44817bcc-06a1-3d35-ada2-897e530980de] => Array
(
[menuid] => 44817bcc-06a1-3d35-ada2-897e530980de
[parentid] => 9bc0436b-ee7d-30a1-b691-8d940a6d4d2c
[menu_name] => 添加反馈
)
[6b7eb83a-5c67-30ff-a1a9-28f943abbd11] => Array
(
[menuid] => 6b7eb83a-5c67-30ff-a1a9-28f943abbd11
[parentid] => 9bc0436b-ee7d-30a1-b691-8d940a6d4d2c
[menu_name] => 审批流程
[child] => Array
(
[95382146-c970-32cd-b6fb-fcbb1eb1dfda] => Array
(
[menuid] => 95382146-c970-32cd-b6fb-fcbb1eb1dfda
[parentid] => 6b7eb83a-5c67-30ff-a1a9-28f943abbd11
[menu_name] => 我的审批流程
)
[e837d650-692b-3725-bb58-51f2c4808957] => Array
(
[menuid] => e837d650-692b-3725-bb58-51f2c4808957
[parentid] => 6b7eb83a-5c67-30ff-a1a9-28f943abbd11
[menu_name] => 我发起的流程
)
)
)
)
)
)
$r = $easy->get([
'table' => 'pirates',
'column' => ['*'],
'where' => ['piratesid' => '2'],
'order' => ['piratesid'=>'desc'],
'group' => ['piratesid'],
'limit' => [1,2]
]);
$r = $easy->get([
'table' => [
'pirates','devilnut'
],
'column' => [
'pirates' => ['piratesid','name'],
'devilnut' => ['devilnutid','devilnutname'],
],
'where' => [
'pirates' => ['piratesid' => '1']
],
'in' => [
'pirates' => ['piratesid' => [1,2]]
],
'join' => [
['pirates' => 'piratesid','devilnut'=>'owner' ,'J' => 'left']
],
'order' => [
'pirates' => ['piratesid'],
'devilnut' => ['devilnutid']
],
'group' => [
'pirates' => ['piratesid']
],
'limit' => [1,3],
'count' => [
'pirates' => ['piratesid']
]
]);
$easy->dropPirates([
'piratesid' => 5
]);
$pirates->dropPiratesid(5);
$pirates->drop(5);
$easy->setPirates(
['data' => [
'Piratesid' => 8
],
'where' => [
'Piratesid' => 6,
['Piratesid' , '>' , 5]
],
'in' => [
'Piratesid' => [5]
]
]);
$pirates->set(['Piratesid' => null]); $easy->setPirates(['Piratesid' => null]);
1. 直接获取实例:
$easyModel = new EasyModel();
2. model继承EasyModel
class Queue extends EasyModel
在model 里面可以定义属性
pulbic $table //表名
public $primaryKey //主键名
* 这种方式如果定义了属性table则只能进行单表操作
* 操作类型关键字必须在方法的开头 * get 代表查询 * set 代表update/insert * drop 代表删除
1.通过继承的并且定义了table属性的方法中不能包含表名 2.需要多表操作的需要在配置文件中定义 config/easyModel.php
1.在表名后面和查询关键字By前面首字母大写
1.如果有By关键字会优先使用By之后首字母大写的字符串作为查询条件 2.如果没有By则使用parmaryKey属性 3.如果没有parmaryKey属性则使用table属性+id作为条件 4.多表的where是By之后Table1 +Column1+Column2 + Table2+Column3... 5.多表的whereBy之后Table1 没有跟Column则去此表全部数据
1.L1_2/L1
* 关键字位于方法最后 1.T 无限分类结构 2.K
<?php
array(
'siblings' => array(
//a,b,c代表三个表关联操作
//getABC()/getAB()都可以匹配到该条配置 getBC()/getAC/getBAC无法匹配
'a,b,c' => array(
array('a' => 'id' , 'b' => 'aid'),
array('b' => 'id' , 'c' => 'bid')
)
)
);