PHPackages                             cnsdose/salesforce-php - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. cnsdose/salesforce-php

ActiveLibrary[API Development](/categories/api)

cnsdose/salesforce-php
======================

Salesforce RESTful client

v1.1.0(6y ago)01.6k—0%MITPHPPHP ^7.1.0CI failing

Since Jun 25Pushed 6y ago1 watchersCompare

[ Source](https://github.com/cnsdose/salesforce-php)[ Packagist](https://packagist.org/packages/cnsdose/salesforce-php)[ RSS](/packages/cnsdose-salesforce-php/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (6)Versions (3)Used By (0)

Salesforce PHP SDK [![Build Status](https://camo.githubusercontent.com/f6f5067bc85d22b70e9c96afcb565fb8aab534749f18f5cb49209e56c031ee0f/68747470733a2f2f7472617669732d63692e6f72672f636e73646f73652f73616c6573666f7263652d7068702e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/cnsdose/salesforce-php)
====================================================================================================================================================================================================================================================================================================================

[](#salesforce-php-sdk-)

Installation
------------

[](#installation)

1. `composer require cnsdose/salesforce-php`
2. Register service provider
    1. Laravel

        ```
        // config/app.php
        'providers' => [
            // ...
            \CNSDose\Salesforce\Providers\SalesforceProvider::class
            // ...
        ]
        ```
    2. Lumen

        ```
        // bootstrap/app.php
        $app->register(\CNSDose\Salesforce\Providers\SalesforceProvider::class);
        ```
    3. Others

        Laravel/Lumen is optional, as long as you can provide a `config($key, $default)` function, e.g.

        ```
        function config(string $key, $default = null)
        {
            $configs = [
                'salesforce' => include __DIR__ . '/../config/salesforce.php',
            ];
            return array_get($configs, $key, $default);
        }
        ```
3. `php artisan vendor:publish --provider='CNSDose\Salesforce\Providers\SalesforceProvider'`

Configuration
-------------

[](#configuration)

See `config/salesforce.php`.

Records API (REST API)
----------------------

[](#records-api-rest-api)

### Query Records

[](#query-records)

*The query builder only supports a small subset of SOQL clauses currently.*

#### Basic Usage

[](#basic-usage)

**NOTE**: `salesforce-php` does not support automatic quoting/escaping yet.

```
$result = Account::build()
    ->where('Type', 'LIKE', "'Customer%'")
    ->where('CurrencyIsoCode', "'USD'")
    ->where('CreatedDate', '>=', '2019-01-23T01:01:01.000Z')
    ->where('Site', '=', null)
    ->query();
```

#### Resolving Relationships

[](#resolving-relationships)

```
$result = Account::build()
    ->select('*')
    ->resolve(Contact::class, 'Contacts')
    ->query();
```

#### Nested Query

[](#nested-query)

```
$contact = Contact::build()
    ->where(
        'AccountId',
        'IN',
        Account::build()
            ->select('Id')
            ->where('Name', "'AccountExample1'")
            ->orWhere('Name', "'AccountExample2'")
    )
    ->query();
$result = BaseRecordModel::build()
    ->select('Id')
    ->select(
        BaseRecordModel::build()
            ->select('Id')
            ->from('Account.Contacts')
    )
    ->from('Account')
    ->query();
```

#### Raw Query

[](#raw-query)

```
// $result: original JSON
$result = BaseRecordModel::build()
    ->queryRaw('SELECT Id FROM Account');

// $result: Account[]
$result = Account::build()
    ->queryRaw('SELECT Id FROM Account');
```

#### Query by ID

[](#query-by-id)

This method retrieves all defined fields in Salesforce, even if they are not specified in the corresponding class or `config/salesfore.php`.

```
$result = Account::queryById('0010o00002Cn41XXXX');
```

### Create/Update/Delete Records

[](#createupdatedelete-records)

#### Create a record

[](#create-a-record)

```
$contact = new Contact();
$contact->FirstName = 'Sheep';
$contact->LastName = 'Shaun';
$contact->Email = 'shaun@example.com';
$contact->create();
```

#### Upsert/Delete a record

[](#upsertdelete-a-record)

```
/**
 * @var Contact $contact
 */
$contact = Contact::build()
    ->where('LastName', "'Shaun'")
    ->query()[0];
$contact->FirstName = 'Lamb';       // changes after object instantiation are recorded
$contact->upsert();

$contact = new Contact([            // we do not need to query first
    'Id' => $contact->Id,
]);
$contact->FirstName = 'Mince';
$contact->upsert();

$contact->delete();                 // Id is required to delete a record

// Upsert by external ID
$contact = new Contact([
    'Email' => 'bitzer@example.com',
]);
$contact->FirstName = 'Bitzer';
$contact->LastName = 'Woof';
$contact->upsert('Email');
```

### Conversion Rules

[](#conversion-rules)

Conversion rules allows attributes to be automatically converted/formatted.

#### Built-In Rules

[](#built-in-rules)

Built-in rules are registered at `\CNSDose\Salesforce\Support\Conversion\BaseConversion::$conversions`.

Some rules allow parameters, e.g. `number:16,2` mean 16 digits to the left of decimal point and 2 to the right.

#### Custom Rules

[](#custom-rules)

1. Create a class which is derived from `\CNSDose\Salesforce\Support\Conversion\BaseConversion`
2. Implement required methods
    1. `doDecode`: post-processes data after downloaded from API
    2. `doEncode`: pre-process data before uploaded to API
3. Register rule via `\CNSDose\Salesforce\Support\Conversion\BaseConversion::registerRule`
4. Rule parameters: format `rule_name:arg1,arg2` can be used to pass arguments to the corresponding class constructor, an example could be `\CNSDose\Salesforce\Support\Conversion\Number`

### Custom Fields

[](#custom-fields)

Custom fields can be defined in `config/salesforce.php`. Custom fields take precedence over default fields in case of conflicts between names.

#### Example

[](#example)

Adding 3 custom fields, with conversion rules where applicable, to object `Custom`

```
[
    'custom_fields' => [
        \CNSDose\Salesforce\Models\Sales\Custom::class => [
            'Float__c' => 'number:16,2',
            'Time__c' => 'time',
            'SystemModstamp' => null,
        ],
    ],
]
```

### Custom Objects

[](#custom-objects)

Models can be automatically generated for custom objects that have been defined in Salesforce via Artisan command `salesforce:generate-record-model`.

```
$ php artisan help salesforce:generate-record-model
Description:
  Generate Salesforce record model dynamically from API

Usage:
  salesforce:generate-record-model [options] [--]

Arguments:
  object

Options:
  -N, --namespace[=NAMESPACE]
      --package[=PACKAGE]
  -C, --class[=CLASS]
  -T, --token[=TOKEN]
  -A, --all-fields

```

#### Example

[](#example-1)

```
$ php artisan salesforce:generate-record-model -N 'MyProject\Models' -C Custom -A Custom__c
