Laravel 12 – 13
PHP 8.4+
The project is in a healthy, maintained state
A Laravel package that provides an Eloquent-style interface for interacting with Salesforce objects.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

^10.0.0|^11.0
pestphp/pest-plugin-arch
^4.0
phpstan/extension-installer
^1.4
phpstan/phpstan-deprecation-rules
^2.0
phpstan/phpstan-phpunit
^2.0

Runtime

 Project Readme
Logo for Eloquent Salesforce Objects

Eloquent Salesforce Objects

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

A Laravel package that lets you work with Salesforce objects using Eloquent syntax. Built on top of omniphx/forrest for authentication and API communication.

This package was heavily inspired by fabulous roblesterjr04/EloquentSalesForce, but written from the ground up with modern PHP 8.4+, full type safety, and a cleaner architecture. If you're migrating from that package, see the migration guide.

Features

  • Eloquent-Style Models - Define Salesforce objects using familiar Laravel model syntax
  • CRUD Operations - Create, read, update, and delete Salesforce records
  • Relationships - hasMany, belongsTo, and hasOne
  • Batch Queries - Execute multiple SOQL queries in a single API call
  • Bulk Operations - Efficient bulk insert, update, and delete
  • Aggregate Functions - COUNT, SUM, AVG, MIN, MAX
  • Pagination - Built-in pagination with Laravel's paginator
  • Apex REST - Call custom Apex REST endpoints
  • Model Generator - php artisan make:salesforce-model scaffolds models from live Salesforce metadata

Requirements

  • PHP 8.4+
  • Laravel 12.0+
  • Salesforce account with API access

Quick Start

composer require daikazu/eloquent-salesforce-objects

Configure omniphx/forrest with your Salesforce credentials, then scaffold a model:

php artisan make:salesforce-model Account

Or define one manually:

use Daikazu\EloquentSalesforceObjects\Models\SalesforceModel;

class Account extends SalesforceModel
{
    protected ?array $defaultColumns = [
        'Name',
        'Industry',
        'AnnualRevenue',
    ];
}

Query with familiar Eloquent syntax:

$accounts = Account::where('Industry', 'Technology')
    ->orderBy('Name')
    ->get();

$account = Account::create(['Name' => 'Acme Corp']);
$account->update(['Industry' => 'Manufacturing']);
$account->delete();

$account->contacts; // hasMany
$contact->account;  // belongsTo

See the Quickstart Guide for a full walkthrough.

Documentation

Getting Started

Core Concepts

Advanced

Reference

Testing

composer test

Credits

License

MIT. See LICENSE.


Need help? Check the docs or open an issue.