Tenant-aware commands
Even though tenants: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:
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:
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:
tenancy()->find($this->argument('tenant_id'))->run(function () {
// Your actual command code
});