SalesforceのデータにアクセスするためのPHP5ライブラリ「sRecord」の使い方(2)
投稿者: miztaka, カテゴリ: PHP, Salesforce, sRecord, tags: force.com, php, salesforce, srecord概要
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.