Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
services
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
tencent
services
Commits
8ea57842
Commit
8ea57842
authored
Sep 18, 2018
by
xmy
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
b0c6b4d5
52e40b27
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
67 additions
and
44 deletions
+67
-44
src/Common/Entity/Query.php
+4
-44
src/Common/Entity/Split.php
+63
-0
No files found.
src/Common/Entity/Query.php
View file @
8ea57842
...
@@ -9,9 +9,7 @@
...
@@ -9,9 +9,7 @@
*/
*/
namespace
Swoft\Db
;
namespace
Swoft\Db
;
use
Hdll\Services\Common\Bean\Collector\SplitCollector
;
use
Hdll\Services\Common\Entity\Split
;
use
Swoft\Core\RequestContext
;
use
Swoft\Db\Bean\Collector\EntityCollector
;
/**
/**
* Query
* Query
...
@@ -28,50 +26,12 @@ class Query
...
@@ -28,50 +26,12 @@ class Query
public
static
function
table
(
string
$tableName
,
string
$alias
=
null
)
:
QueryBuilder
public
static
function
table
(
string
$tableName
,
string
$alias
=
null
)
:
QueryBuilder
{
{
$query
=
new
QueryBuilder
();
$query
=
new
QueryBuilder
();
//初始化分表
$collector
=
SplitCollector
::
getCollector
();
//分表搜集器
Split
::
initSplit
(
$tableName
,
$query
);
if
(
$collector
[
'map'
]
!==
null
&&
is_array
(
$collector
[
'map'
]))
{
$map
=
array_flip
(
$collector
[
'map'
]);
}
//如果是实体且为分表实体
if
(
strpos
(
$tableName
,
'\\'
)
!==
false
&&
isset
(
$collector
[
$tableName
]))
{
$className
=
$tableName
;
$tableName
=
$collector
[
$tableName
][
'table'
];
$entityCollector
=
EntityCollector
::
getCollector
();
//设置分表对应的className
EntityCollector
::
setCollector
(
$tableName
.
'_'
.
self
::
getDbNum
(
$className
),
$tableName
);
//获取分表名
$tableName
=
$tableName
.
'_'
.
self
::
getDbNum
(
$className
);
//设置分表类型
$query
->
selectInstance
(
$entityCollector
[
$className
][
'instance'
]);
}
elseif
(
isset
(
$map
[
$tableName
])
)
{
//非实体且分表
$className
=
$map
[
$tableName
];
$defaultTbleName
=
$tableName
;
$tableName
=
$tableName
.
'_'
.
self
::
getDbNum
(
$className
);
//设置分表对应的className
EntityCollector
::
setCollector
(
$tableName
,
$defaultTbleName
);
}
$query
=
$query
->
table
(
$tableName
,
$alias
);
$query
=
$query
->
table
(
$tableName
,
$alias
);
return
$query
;
return
$query
;
}
}
private
function
getDbNum
(
$className
)
{
$splitCollector
=
SplitCollector
::
getCollector
();
$splitNum
=
$splitCollector
[
$className
][
'num'
];
$data
=
RequestContext
::
getContextData
();
$storeId
=
$data
[
'userInfo'
][
'storeId'
];
return
$storeId
%
$splitNum
;
}
}
}
src/Common/Entity/Split.php
0 → 100644
View file @
8ea57842
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/9/18
* Time: 10:21
*/
namespace
Hdll\Services\Common\Entity
;
use
Hdll\Services\Common\Bean\Collector\SplitCollector
;
use
Swoft\Core\RequestContext
;
use
Swoft\Db\Bean\Collector\EntityCollector
;
use
Swoft\Db\QueryBuilder
;
class
Split
{
public
static
function
initSplit
(
$tableName
,
QueryBuilder
$query
)
{
$collector
=
SplitCollector
::
getCollector
();
//分表搜集器
if
(
$collector
[
'map'
]
!==
null
&&
is_array
(
$collector
[
'map'
]))
{
$map
=
array_flip
(
$collector
[
'map'
]);
}
//如果是实体且为分表实体
if
(
strpos
(
$tableName
,
'\\'
)
!==
false
&&
isset
(
$collector
[
$tableName
]))
{
$className
=
$tableName
;
$tableName
=
$collector
[
$tableName
][
'table'
];
$entityCollector
=
EntityCollector
::
getCollector
();
//设置分表对应的className
EntityCollector
::
setCollector
(
$tableName
.
'_'
.
self
::
getDbNum
(
$className
),
$tableName
);
//获取分表名
$tableName
=
$tableName
.
'_'
.
self
::
getDbNum
(
$className
);
//设置分表类型
$query
->
selectInstance
(
$entityCollector
[
$className
][
'instance'
]);
}
elseif
(
isset
(
$map
[
$tableName
])
)
{
//非实体且分表
$className
=
$map
[
$tableName
];
$defaultTbleName
=
$tableName
;
$tableName
=
$tableName
.
'_'
.
self
::
getDbNum
(
$className
);
//设置分表对应的className
EntityCollector
::
setCollector
(
$tableName
,
$defaultTbleName
);
}
return
$tableName
;
}
private
function
getDbNum
(
$className
)
{
$splitCollector
=
SplitCollector
::
getCollector
();
$splitNum
=
$splitCollector
[
$className
][
'num'
];
$data
=
RequestContext
::
getContextData
();
$storeId
=
$data
[
'userInfo'
][
'storeId'
];
return
$storeId
%
$splitNum
;
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment