Document making a command tenant-aware (#196)

* Copy and modify v2 tenant aware commands docs page

* Add navigation link to the tenant-aware commands page

* Use the v2 tenant-aware commands page and slightly modify it
This commit is contained in:
lukinovec 2022-09-09 19:03:53 +02:00 committed by GitHub
parent b8d7466496
commit 032bf08040
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 62 additions and 0 deletions

View file

@ -209,6 +209,7 @@ return [
], ],
], ],
'Console commands' => 'console-commands', 'Console commands' => 'console-commands',
'Tenant-aware commands' => 'tenant-aware-commands',
'Tenant attribute encryption' => 'tenant-attribute-encryption', 'Tenant attribute encryption' => 'tenant-attribute-encryption',
'Cached lookup' => 'cached-lookup', 'Cached lookup' => 'cached-lookup',
'Real-time facades' => 'realtime-facades', 'Real-time facades' => 'realtime-facades',

View file

@ -0,0 +1,61 @@
---
title: Tenant-aware commands
description: Tenant-aware commands
extends: _layouts.documentation
section: content
---
# Tenant-aware commands {#tenant-aware-commands}
Even though [`tenants:run`]({{ $page->link('console-commands#run') }}) lets you run arbitrary artisan commands for tenants, you may want to have strictly tenant commands.
To make a command tenant-aware, utilize the `TenantAwareCommand` trait:
```php
class MyCommand extends Command
{
use TenantAwareCommand;
}
```
However, this trait requires you to implement a `getTenants()` method that returns an array of `Tenant` instances.
If you don't want to implement the options/arguments yourself, you may use one of these two traits:
- `HasATenantsOption` - accepts multiple tenant IDs, optional -- by default the command is executed for all tenants
- `HasATenantArgument` - accepts a single tenant ID, required argument
These traits implement the `getTenants()` method needed by `TenantAwareCommand`.
> Note: If you're using a custom constructor for your command, you need to add `$this->specifyParameters()` at the end for the option/argument traits to take effect.
So if you use these traits in combination with `TenantAwareCommand`, you won't have to change a thing in your command:
```php
class FooCommand extends Command
{
use TenantAwareCommand, HasATenantsOption;
public function handle()
{
//
}
}
class BarCommand extends Command
{
use TenantAwareCommand, HasATenantArgument;
public function handle()
{
//
}
}
```
### Custom implementation
If you want more control, you may implement this functionality yourself by simply accepting a `tenant_id` argument and then inside `handle()` doing something like this:
```php
tenancy()->find($this->argument('tenant_id'))->run(function () {
// Your actual command code
});
```