appventus/archimede-bundle

此软件包已被废弃,不再维护。没有建议的替代软件包。

Symfony ArchimedeBundle

安装次数: 1,361

依赖项: 0

建议者: 0

安全: 0

类型:symfony-bundle

此软件包尚未发布版本,可用的信息很少。


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'
                        }
                    }
                    ))
                }}