概要

sRecordは seasar2の S2JDBC, それをまねて作った拙作teeple2のActiveRecordと似たような使い方でSalesforceのデータを取り扱うことができるPHP5ライブラリです。google codeにオープンソースとして公開していますので是非ご利用ください。
http://code.google.com/p/srecord4p/

今日はクエリーについて説明します。

メソッドチェーン

sRecordを使うとメソッドチェーンでSOQL(Salesforce Object Query Language)を組み立てて実行することができます。
例えば以下のSOQLを実行したい場合、

SELECT Account.Name, FROM Account WHERE Name LIKE '%G%' AND Owner.Username = 'sato'

sRecordでは以下のように書くことができます。


$records = Sobject_Account::neu()
    ->contains('Name', 'G')
    ->eq('Owner.Username', 'sato')
    ->select('Name');

sRecordのメソッドとSOQLの対応表

sRecordのメソッドとSOQLの表現の対応は以下の通りです。

function SOQL sRecord method
Equals name = ‘foo’ eq(‘name’, ‘foo’)
Not equals name != ‘foo’ ne(‘name’, ‘foo’)
Less than age < '10' lt(‘age’, 10)
Less equal age <= '10' le(‘age’, 10)
Greater than age > ’10’ gt(‘age’, 10)
Greater equal age >= ’10’ ge(‘age’, 10)
Like name like ‘%foo%’ contains(‘name’,’foo’)
name like ‘foo%’ starts(‘name’,’foo’)
name like ‘%foo’ ends(‘name’,’foo’)
name like ‘%appl_%’ where(“name like ‘%appl_%'”)
includes, excludes MSP1__c includes (‘AAA;BBB’, ‘CCC’) includes(‘MSP1__c’, ‘AAA;BBB’, ‘CCC’) or
includes(‘MSP1__c’, array(‘AAA;BBB’,’CCC’))
Boolean BooleanField = TRUE eq(‘BooleanField’, TRUE)
BooleanField = FALSE eq(‘BooleanField’, FALSE)
Null SomeField = null eq(‘SomeField’, null)
SomeField != null ne(‘SomeField’, null)
In age in (’10’,’20’,’30’) in(‘age’, ’10’,’20’,’30’) or
in(‘age’,array(’10’,’20’,’30)
Order ORDER BY name, age order(‘name, age’)
Limit LIMIT 10 limit(10)
Offset OFFSET 10 offset(10)

SELECTするカラムの指定

SELECTするカラムを指定したい場合はselect()の引数にカンマ区切りで指定してください。
パラメータがない場合はすべてのカラムがSELECTされます。


$records = Sobject_Account::neu()
    ->contains('Name', 'G')
    ->eq('Owner.Username', 'sato')
    ->select('Id, Name');

クエリ結果の取得

select()メソッドの戻り値は該当するSobjectの配列となります。(上記の例ではSobject_Accountの配列)

1レコード(オブジェクト)を取得したい場合は

find()メソッドを使います。find()メソッドはクエリー結果が複数行の場合はExceptionを投げます。クエリー結果が0行の場合はNULLを返します。

find()メソッドでは第一引数にレコードのIDを指定することができます。第二引数はSELECTするカラムです。(どちらもNULL可)


// example for specifing Id

$account = Sobject_Account::neu()->find('xxxxxxxxxxxxxxxx'); // xxxxx is Id of Salesforce SObject.

コメントは受け付けていません。