tenancy-docs/source/docs/v3/tenant-aware-commands.blade.md
Abraham Brookes 4054f55415
add namespaces to traits on console commands page
Just had to track down the namespace before using these traits, figured it would be easier for those who come after if they are already in the docs.
2023-06-02 14:37:38 +10:00

2.1 KiB

title description extends section
Tenant-aware commands Tenant-aware commands _layouts.documentation content

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:

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 tenants
  • Stancl\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()
    {
        //
    }
}

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
});