dcarbone / camel
一个旨在帮助简化SharePoint CAML查询构建的库
0.6.0
2018-02-02 03:22 UTC
Requires
- php: >=5.3.3
Requires (Dev)
- phpunit/phpunit: @stable
README
一个旨在帮助简化SharePoint CAML查询构建的库
构建状态
安装
"require" : { "dcarbone/camel" : "@stable" },
初始化
开始时,只需创建一个新的Camel。
use \DCarbone\Camel\Camel; $camel = new Camel();
驼峰
一旦创建了您的Camel,就可以开始添加驼峰了!
有三种类型的驼峰
您可以通过两种方式之一将它们添加到Camel中
// Returns a \DCarbone\Camel\Hump\Where instance that is attached to $camel $camel->where(); // Alternatively... $where = new \DCarbone\Camel\Hump\Where(); $camel->setWhere($where);
对于所有驼峰,这两种方式都是完全可以接受的。
节点
有三种主要的节点类型
以下是对每种节点的简要说明
ComparisonOperator
这些可能是您在Camel中最常用的节点。我相信我已经实现了SharePoint CAML查询系统支持的每一种可能的比较运算符。如果遗漏了哪一个,请告诉我!
LogicalJoin
这里只有两个
为了保持DRY原则,我在这些节点的基类中实现了大部分必要的逻辑
ValueNode
这些节点通常仅用于上述比较运算符节点内部,允许您将输入值与列表中的列/等进行比较。
每个比较运算符都有一个允许的值节点的特定列表,请查看它们的类定义以查看它们是什么。
简单示例
假设您有一个看起来像这样的SharePoint列表
并且您想获取所有女性的信息。您可以这样做
$camel->where() ->eq() ->fieldRef()->attribute('name', 'Gender')->end() ->value()->attribute('type', 'Text')->nodeValue('female'); $queryXML = (string)$camel;
上述代码将产生以下结果
<Query xmlns=""> <Where> <Eq> <FieldRef Name="Gender" /> <Value Type="Text">female</Value> </Eq> </Where> </Query>
您还可以进行逻辑连接。
$camel->where() ->orNode() ->eq() ->fieldRef()->attribute('name', 'Title')->end() ->value()->attribute('type', 'Text')->nodeValue('Daniel')->end() ->end() ->eq() ->fieldRef()->attribute('name', 'Title')->end() ->value()->attribute('type', 'Text')->nodeValue('David')->end();
上述代码将产生
<Query xmlns=""> <Where> <Or> <Eq> <FieldRef Name="Title" /> <Value Type="Text">Daniel</Value> </Eq> <Eq> <FieldRef Name="Title" /> <Value Type="Text">David</Value> </Eq> </Or> </Where> </Query>
您也可以随意嵌套。
$camel->where() ->orNode() ->eq() ->fieldRef()->attribute('name', 'Title')->end() ->value()->attribute('type', 'Text')->nodeValue('Daniel')->end() ->end() ->orNode() ->eq() ->fieldRef()->attribute('name', 'Title')->end() ->value()->attribute('type', 'Text')->nodeValue('Elizabeth')->end() ->end() ->orNode() ->eq() ->fieldRef()->attribute('name', 'Title')->end() ->value()->attribute('type', 'Text')->nodeValue('Beatrice')->end() ->end() ->orNode() ->eq() ->fieldRef()->attribute('name', 'Title')->end() ->value()->attribute('type', 'Text')->nodeValue('Anna')->end() ->end() ->eq() ->fieldRef()->attribute('name', 'Title')->end() ->value()->attribute('type', 'Text')->nodeValue('David');
这将产生
<Query xmlns=""> <Where> <Or> <Eq> <FieldRef Name="Title" /> <Value Type="Text">Daniel</Value> </Eq> <Or> <Eq> <FieldRef Name="Title" /> <Value Type="Text">Elizabeth</Value> </Eq> <Or> <Eq> <FieldRef Name="Title" /> <Value Type="Text">Beatrice</Value> </Eq> <Or> <Eq> <FieldRef Name="Title" /> <Value Type="Text">Anna</Value> </Eq> <Eq> <FieldRef Name="Title" /> <Value Type="Text">David</Value> </Eq> </Or> </Or> </Or> </Or> </Where> </Query>
结论和未来开发
目前,这个库满足了我的需求。如果您觉得这个库很有用,并希望看到添加或更改的内容,请告诉我!