title | description | extends | section |
---|---|---|---|
Tenant-aware commands |
Tenant-aware commands |
_layouts.documentation |
content |
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:
use Stancl\Tenancy\Concerns\TenantAwareCommand;
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:
Stancl\Tenancy\Concerns\HasATenantsOption
- accepts multiple tenant IDs, optional -- by default the command is executed for all tenantsStancl\Tenancy\Concerns\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:
use Stancl\Tenancy\Concerns\TenantAwareCommand;
use Stancl\Tenancy\Concerns\HasATenantsOption;
class FooCommand extends Command
{
use TenantAwareCommand, HasATenantsOption;
public function handle()
{
//
}
}
use Stancl\Tenancy\Concerns\TenantAwareCommand;
use Stancl\Tenancy\Concerns\HasATenantArgument;
class BarCommand extends Command
{
use TenantAwareCommand, HasATenantArgument;
public function handle()
{
//
}
}
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:
tenancy()->find($this->argument('tenant_id'))->run(function () {
// Your actual command code
});