Commit d448c95a by feixiang

query分表重构

parent 9f312bb1
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
*/ */
namespace Hdll\Services\Common\Bean\Collector; namespace Hdll\Services\Common\Bean\Collector;
use App\Bean\Annotation\Auth;
use Hdll\Services\Common\Bean\Annotation\Split; use Hdll\Services\Common\Bean\Annotation\Split;
use Swoft\Bean\CollectorInterface; use Swoft\Bean\CollectorInterface;
use Swoft\Db\Bean\Collector\EntityCollector;
class SplitCollector implements CollectorInterface class SplitCollector implements CollectorInterface
{ {
...@@ -26,15 +26,12 @@ class SplitCollector implements CollectorInterface ...@@ -26,15 +26,12 @@ class SplitCollector implements CollectorInterface
{ {
if ($objectAnnotation instanceof Split) { if ($objectAnnotation instanceof Split) {
$name = $objectAnnotation->getName(); $entityCollector = EntityCollector::getCollector();
$scope = $objectAnnotation->getScope();
self::$auth[$className]['name'] = $name; self::$auth[$className]['table'] = $entityCollector[$className]['table']['name'];;
self::$auth[$className]['order'] = $scope; self::$auth['map'][$className] = $entityCollector[$className]['table']['name'];
self::$auth['map'][$className] = $scope;
} }
var_dump($className, $objectAnnotation, $propertyName, $methodName);
} }
public static function getCollector() public static function getCollector()
......
...@@ -26,10 +26,10 @@ class SplitParser extends AbstractParser ...@@ -26,10 +26,10 @@ class SplitParser extends AbstractParser
{ {
$beanName = $className; $beanName = $className;
$scope = Scope::SINGLETON; $scope = Scope::SINGLETON;
var_dump('parser');
SplitCollector::collect($className, $objectAnnotation, $propertyName, $methodName, $propertyValue); SplitCollector::collect($className, $objectAnnotation, $propertyName, $methodName, $propertyValue);
return [$beanName, $scope, ""]; return [$beanName, $scope, ""];
} }
......
...@@ -48,7 +48,7 @@ class SplitWrapper extends AbstractWrapper ...@@ -48,7 +48,7 @@ class SplitWrapper extends AbstractWrapper
*/ */
public function isParsePropertyAnnotations(array $annotations): bool public function isParsePropertyAnnotations(array $annotations): bool
{ {
return false; return true;
} }
/** /**
* 是否解析方法注解 * 是否解析方法注解
......
...@@ -9,7 +9,9 @@ ...@@ -9,7 +9,9 @@
*/ */
namespace Swoft\Db; namespace Swoft\Db;
use Hdll\Services\Common\Bean\Collector\SplitCollector;
use Swoft\Core\RequestContext; use Swoft\Core\RequestContext;
use Swoft\Db\Bean\Collector\EntityCollector;
/** /**
* Query * Query
...@@ -17,24 +19,42 @@ use Swoft\Core\RequestContext; ...@@ -17,24 +19,42 @@ use Swoft\Core\RequestContext;
class Query class Query
{ {
/** /**
* Query查询分表处理
* @param string $tableName * @param string $tableName
* @param string $alias * @param string|null $alias
*
* @return QueryBuilder * @return QueryBuilder
* @throws Exception\DbException
*/ */
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();
$query = $query->table($tableName, $alias);
return $query; $collector = SplitCollector::getCollector();//分表搜集器
}
private function getTableName($commentString) //如果是实体且为分表实体
{ if (strpos($tableName, '\\') !== false && isset($collector[$tableName])) {
preg_match('/(?<=Table\(name=").*(?="\))/', $commentString, $matches); $className = $tableName;
return $tableName = isset($matches[0])?$matches[0]:''; $tableName = $collector[$tableName]['table'];
$entityCollector = EntityCollector::getCollector();
//设置分表对应的className
EntityCollector::setCollector($tableName.'_'.self::getDbNum(), $tableName);
//获取分表名
$tableName = $tableName.'_'.self::getDbNum();
//设置分表类型
$query->selectInstance($entityCollector[$className]['instance']);
} elseif ($map = array_flip($collector['map']) && isset($map[$tableName]) ) { //非实体
$tableName = $tableName.'_'.self::getDbNum();
}
$query = $query->table($tableName, $alias);
return $query;
} }
private function getDbNum() private function getDbNum()
......
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/9/14
* Time: 10:00
*/
namespace Hdll\Services\Common\Traits;
trait EntityCollectorTrait
{
public static function setCollector($tableName, $defaultTableName)
{
return ! isset(self::$entities[$tableName]) && self::$entities[$tableName] = &self::$entities[$defaultTableName];
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment