A simple approach to interacting with Airtables.
You can install the package via composer:
composer require tapp/laravel-airtable
Publish the config file:
php artisan vendor:publish --provider="Tapp\Airtable\AirtableServiceProvider"
Define airtables account information in .env:
AIRTABLE_KEY=
AIRTABLE_BASE=
AIRTABLE_TABLE=
AIRTABLE_TYPECAST=false
AIRTABLE_KEY
Airtable is requiring personal access tokens for Authorization starting in 2024. A token can be created here: https://airtable.com/create/tokens. If you are upgrading from an API key to access token, simply replace the value previously held in this environment variable with your new token.AIRTABLE_BASE
can be found here: https://airtable.com/api, select base then copy from URL:https://airtable.com/[Base Is Here]/api/docs#curl/introduction
AIRTABLE_TABLE
can be found in the docs for the appropriate base, this is not case senstive. IE:tasks
AIRTABLE_TYPECAST
set this to true to allow automatic casting.
If you need to support multiple tables, add them to the tables config in the config/airtable.php If your table is on a different base than the one set in the env, add that as well.
...
'tables' => [
'default' => [
'name' => env('AIRTABLE_TABLE', 'Main'),
'base' => 'base_id',
],
'companies' => [
'name' => env('AIRTABLE_COMPANY_TABLE', 'Companies'),
'base' => 'base_id',
],
...
],
...
use Airtable;
- This will only return the first 100 records due to Airtable page size limiation
Airtable::table('tasks')->get();
- This will get all records by sending multiple requests until all record are fetched.
- Optional Parameter which is the delay between requests in microseconds as API is limited to 5 requests per second per base, defaults to 0.2 second.
Airtable::table('tasks')->all();
Airtable::table('tasks')->all(500000); // 0.5 seconds
Airtable::find('id_string');
- First argument is the column name
- Second argument is the operator or the value if you want to use equal '=' as an operator.
- Third argument is the value of the filter
Airtable::where('id', '5')->get();
Airtable::where('id', '>', '5')->get();
- When using
where
is not enough you may need to pass in raw filter values. - Airtable reference
Airtable::table('tasks')->filterByFormula('OR({id} = "abc", {id} = "def", {id} = "ghi")')->get();
- First argument is the column name
- Second argument is the sort direction:
asc
(default) ordesc
Airtable::orderBy('id')->get();
Airtable::orderBy('created_at', 'desc')->get();
You can sort by multiple fields by calling orderBy
more than once (a single call with array syntax is not supported):
Airtable::orderBy('id')->orderBy('created_at', 'desc')->get();
Airtable::addParam('returnFieldsByFieldId', true); // one param at a time
Airtable::params(['returnFieldsByFieldId' => true, 'view' => 'My View']) // multiple params at once
- Insert a record
Airtable::create(['name' => 'myName']);
- First argument will be used for finding existing
- Second argument is additional data to save if no results are found and we are creating (will not be saved used if item already exists)
Airtable::firstOrCreate(['name' => 'myName'], ['field' => 'myField']);
- First argument will be used to find existing
- Second argument is additional data to save when we create or update
Airtable::updateOrCreate(['name' => 'myName'], ['field' => 'myField']);
Airtable::table('companies')->firstOrCreate(['Company Name' => $team->name]);
- First argument will be the id
- Second argument is the whole record including the updated fields
Note: Update is destructive and clear all unspecified cell values if you did not provide a value for them. use PATCH up update specified fields
Airtable::table('companies')->update('rec5N7fr8GhDtdNxx', [ 'name' => 'Google', 'country' => 'US']);
- First argument will be the id
- Second argument is the field you would like to update
Airtable::table('companies')->patch('rec5N7fr8GhDtdNxx', ['country' => 'US']);
- Array of data to be updated or patched
Airtable::table('companies')->patch([
[
'id' => 'rec5N7fr8GhDtdNxx',
'fields' => ['country' => 'US']
],
[
'id' => 'rec8BhDt4fs2',
'fields' => ['country' => 'UK']
],
...
]);
- Destroy a record
Airtable::table('companies')->destroy('rec5N7fr8GhDtdNxx');
composer test
Please see CHANGELOG for more information what has changed recently.
Please see CONTRIBUTING for details.
If you discover any security related issues, please email steve@tappnetwork.com instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.
This package was generated using the Laravel Package Boilerplate.