appventus / archimede-bundle
此软件包已被废弃,不再维护。没有建议的替代软件包。
Symfony ArchimedeBundle
此软件包尚未发布版本,可用的信息很少。
README
Archimede 是一个改进的仓库。它允许构建查询、分页器和搜索过滤器。
它围绕 3 个主要组件构建
1) QueryBuilder
示例)
QueryBuilder 是 Archimede 的核心。它允许使用提供的参数从 Doctrine 构建查询。以下是一个语法示例
$metadatas['joins']['planningUnits'] = "entity.planningUnits";
$metadatas['joins']['ads'] = "entity.ads";
$metadatas['joins']['applicants'] = "ads.applicants";
$metadatas['adStatus']['type'] = 'customRelation';
$metadatas['adStatus']['options'] = array(array("entity"=>"ads", "field"=>"status"));
$metadatas['applicantStatus']['type'] = 'customRelation';
$metadatas['applicantStatus']['options'] = array(array("entity"=>"applicants", "field"=>"status"));
$metadatas['applicantRemoved']['type'] = 'customRelation';
$metadatas['applicantRemoved']['options'] = array(array("entity"=>"applicants", "field"=>"cancelled"));
$recruiterTaintedValues = array(
'entity' => 'JobBoardBundle:Recruiter',
'event' => array($event->getId()),
'cancelled' => array(0),
'adStatus' => array('published'),
'applicantStatus' => array('valid'),
'removed' => array(0),
'applicantRemoved' => array(0),
'metadatas' => json_encode($metadatas));
$recruitersForEvent = $this->getContainer()->get('search_engine.query')->searchQuery($recruiterTaintedValues)->execute();
在上述示例中,将对 Recruiter 表执行 SELECT 操作,并与 PlanningUnits、Ad 和 Applicant 表进行连接。它将对 Recruiter 表的 event、cancelled 和 removed 字段以及 Applicant 和 Ad 表的 status 字段以及 Applicant 表的 removed 字段应用条件。
QueryBuilder 的参数由“标准”和“元数据”组成。元数据定义了关系类型和使用的运算符,而标准定义了查询条件。
A) 实体
实体元素定义了查询将执行的表。它具有以下形式
$values = array(
[...],
'entity' => 'MyBundle:MyEntity',
[...]
);
B) 标准化
标准化是应用条件的字段。它们用于查询的 WHERE 部分。它们如下定义
$values = array(
[...],
'<critera>' => array(<criteriaValue>)
[...]
};
C) 元数据
元数据是与构建查询相关的参数。我们可以在其中定义连接和应用于标准的外部字段。
$metadatas = array(<arguments>);
$values = array(
[...],
'metadatas' => json_encode($metadatas),
[...]
};
可能的参数定义如下:a) 连接
元数据允许以下方式添加连接
$metadatas['joins']['<alias>'] = "<entity|alias>.<relation>";
连接表将通过其别名访问。
b) CustomRelation
此类型允许对连接表的特定字段设置条件。
$metadatas['<alias>']['type'] = 'customRelation';
$metadatas['<alias>']['options'] = array(array("entity"=>"<entity>", "field"=>"<fieldName>"));
2) PaginatorBuilder
分页器允许构建分页器。它接受与 queryBuilder 相同的值数组
$recruitersForEventPaginator = $this->getContainer()->get('search_engine.paginator')->create($values, $page, $displayResultsNb);
3) FilterBuilder
FilterBuilder 可以直接从视图通过 twig 渲染器使用。通过传递与 queryBuilder 相同类型的参数以及“过滤器”模板和“列表”模板,它将显示一个表单,其中包含您选择的过滤字段。
{{ render(controller("AvArchimedeBundle:SearchEngine:filters", {
'entityName': 'MyBundle:Ad',
'criterias':
{
0:'trades',
1:
{
'keyword':
{
0:'title',
1:'description'
}
},
2:'company'
},
'scope':
{
'status':
{
0:'published'
}
},
'options':
{
'operandes':
{
'trades':'=',
'company':'=',
'keyword':{0:'LIKE', 1:'LIKE'},
'status':'='
},
},
'render':
{
'list':'MyJobBoardBundle:AdFront:list',
'filters':'MyJobBoardBundle:Front:filters'
}
}
))
}}