dcarbone/camel

一个旨在帮助简化SharePoint CAML查询构建的库

0.6.0 2018-02-02 03:22 UTC

This package is auto-updated.

Last update: 2024-09-17 09:54:53 UTC


README

一个旨在帮助简化SharePoint CAML查询构建的库

构建状态

  • master: Build Status

安装

"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>

结论和未来开发

目前,这个库满足了我的需求。如果您觉得这个库很有用,并希望看到添加或更改的内容,请告诉我!