mirror of
https://github.com/archtechx/tenancy.git
synced 2026-02-05 12:54:05 +00:00
wip
This commit is contained in:
commit
a92690cea8
61 changed files with 51214 additions and 0 deletions
60
source/docs/configuration.md
Normal file
60
source/docs/configuration.md
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
---
|
||||
title: Configuration
|
||||
description: Configuring stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Configuration {#configuration}
|
||||
|
||||
The `config/tenancy.php` file lets you configure how the package behaves.
|
||||
|
||||
> **Note:** If the `tenancy.php` file doesn't exist in your `config` directory, you can publish it by running `php artisan vendor:publish --provider='Stancl\Tenancy\TenancyServiceProvider' --tag=config`
|
||||
|
||||
### `storage_driver, storage`
|
||||
|
||||
This lets you configure the driver for tenant storage, i.e. what will be used to store information about your tenants. You can read more about this on the [Storage Drivers](storage-drivers) page.
|
||||
|
||||
Available storage drivers:
|
||||
- `Stancl\Tenancy\StorageDrivers\RedisStorageDriver`
|
||||
- `Stancl\Tenancy\StorageDrivers\DatabaseStorageDriver`
|
||||
|
||||
### `tenant_route_namespace`
|
||||
|
||||
Controller namespace used for routes in `routes/tenant.php`. The default value is the same as the namespace for `web.php` routes.
|
||||
|
||||
### `exempt_domains`
|
||||
|
||||
If a hostname from this array is visited, the `tenant.php` routes won't be registered, letting you use the same routes as in that file.
|
||||
|
||||
### `database`
|
||||
|
||||
The application's default connection will be switched to a new one — `tenant`. This connection will be based on the connection specified in `tenancy.database.based_on`. The database name will be `tenancy.database.prefix + tenant UUID + tenancy.database.suffix`.
|
||||
|
||||
You can set the suffix to `.sqlite` if you're using sqlite and want the files to be with the `.sqlite` extension. Conversely, you can leave the suffix empty if you're using MySQL, for example.
|
||||
|
||||
### `redis`
|
||||
|
||||
If `tenancy.redis.tenancy` is set to true, connections listed in `tenancy.redis.prefixed_connections` will be prefixed with `config('tenancy.redis.prefix_base') . $uuid`.
|
||||
|
||||
> Note: You need phpredis for multi-tenant Redis.
|
||||
|
||||
### `cache`
|
||||
|
||||
The `CacheManager` instance that's resolved when you use the `Cache` or the `cache()` helper will be replaced by `Stancl\Tenancy\CacheManager`. This class automatically uses [tags](https://laravel.com/docs/master/cache#cache-tags). The tag will look like `config('tenancy.cache.tag_base') . $uuid`.
|
||||
|
||||
If you need to store something in global, non-tenant cache,
|
||||
|
||||
### `filesystem`
|
||||
|
||||
> Note: It's important to differentiate(?TODO) storage_path() and the Storage facade. TODO
|
||||
|
||||
The `storage_path()` will be suffixed with a directory named `config('tenancy.filesystem.suffix_base') . $uuid`.
|
||||
|
||||
The root of each disk listed in `tenancy.filesystem.disks` will be suffixed with `config('tenancy.filesystem.suffix_base') . $uuid`.
|
||||
|
||||
**However, this alone would cause unwanted behavior.** It would work for S3 and similar disks, but for local disks, this would result in `/path_to_your_application/storage/app/tenant1e22e620-1cb8-11e9-93b6-8d1b78ac0bcd/`. That's not what we want. We want `/path_to_your_application/storage/tenant1e22e620-1cb8-11e9-93b6-8d1b78ac0bcd/app/`.
|
||||
|
||||
That's what the `root_override` section is for. `%storage_path%` gets replaced by `storage_path()` *after* tenancy has been initialized. The roots of disks listed in the `root_override` section of the config will be replaced accordingly. All other disks will be simply suffixed with `tenancy.filesystem.suffix_base` + the tenant UUID.
|
||||
|
||||
TODO
|
||||
53
source/docs/console-commands.md
Normal file
53
source/docs/console-commands.md
Normal file
|
|
@ -0,0 +1,53 @@
|
|||
---
|
||||
title: Console Commands
|
||||
description: Console commands with stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Console Commands {#console-commands}
|
||||
|
||||
The package comes with a couple of artisan commands.
|
||||
|
||||
## Migrate {#migrate}
|
||||
|
||||
The most important command. To use tenants, you have to be able to migrate their databases.
|
||||
|
||||
You can use the `tenants:migrate` command to migrate tenant's databases. You can also specify which tenants' databases should be migrated using the `--tenants` option.
|
||||
```
|
||||
php artisan tenants:migrate --tenants=8075a580-1cb8-11e9-8822-49c5d8f8ff23
|
||||
```
|
||||
|
||||
> Note: Tenant migrations must be located in `database/migrations/tenant`.
|
||||
|
||||
You can use these commands outside the command line as well. If you want to migrate a tenant's database in a controller, you can use the `Artisan` facade.
|
||||
```php
|
||||
\Artisan::call('tenants:migrate', [
|
||||
'--tenants' => [$tenant['uuid']]
|
||||
]);
|
||||
```
|
||||
|
||||
## Rollback & seed {#rollback}
|
||||
|
||||
- Rollback: `tenants:rollback`
|
||||
- Seed: `tenants:seed`
|
||||
|
||||
Similarly to [migrate](#migrate), these commands accept a `--tenants` option.
|
||||
|
||||
## Run {#run}
|
||||
|
||||
You can use the tenants:run command to run your own commands for tenants.
|
||||
|
||||
If your command's signature were email:send {user} {--queue} {--subject} {body}, you would run this command like this:
|
||||
```
|
||||
php artisan tenants:run email:send --tenants=8075a580-1cb8-11e9-8822-49c5d8f8ff23 --option="queue=1" --option="subject=New Feature" --argument="body=We have launched a new feature. ..."
|
||||
```
|
||||
|
||||
## Tenant list {#tenant-list}
|
||||
|
||||
```none
|
||||
php artisan tenants:list
|
||||
Listing all tenants.
|
||||
[Tenant] uuid: dbe0b330-1a6e-11e9-b4c3-354da4b4f339 @ localhost
|
||||
[Tenant] uuid: 49670df0-1a87-11e9-b7ba-cf5353777957 @ dev.localhost
|
||||
```
|
||||
22
source/docs/creating-tenants.md
Normal file
22
source/docs/creating-tenants.md
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
title: Creating Tenants
|
||||
description: Creating tenants with stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Creating Tenants {#creating-tenants}
|
||||
|
||||
To create a tenant, you can use
|
||||
|
||||
```php
|
||||
tenant()->create('tenant1.yourapp.com');
|
||||
```
|
||||
|
||||
If you want to set some data while creating the tenant, you can pass an array with the data as the second argument:
|
||||
|
||||
```php
|
||||
tenant()->create('tenant2.yourapp.com', [
|
||||
'plan' => 'free'
|
||||
]);
|
||||
```
|
||||
21
source/docs/custom-database-names.md
Normal file
21
source/docs/custom-database-names.md
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
title: Custom Database Names
|
||||
description: Custom Database Names with stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Custom Database Names {#custom-database-names}
|
||||
|
||||
If you want to specify the tenant's database name, set the `tenancy.database_name_key` configuration key to the name of the key that is used to specify the database name in the tenant storage. You must use a name that you won't use for storing other data, so it's recommended to avoid names like `database` and use names like `_stancl_tenancy_database_name` instead. Then just give the key a value during the tenant creation process:
|
||||
|
||||
```php
|
||||
>>> tenant()->create('example.com', [
|
||||
'_stancl_tenancy_database_name' => 'example_com'
|
||||
])
|
||||
=> [
|
||||
"uuid" => "49670df0-1a87-11e9-b7ba-cf5353777957",
|
||||
"domain" => "example.com",
|
||||
"_stancl_tenancy_database_name" => "example_com",
|
||||
]
|
||||
```
|
||||
18
source/docs/development.md
Normal file
18
source/docs/development.md
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
---
|
||||
title: Development
|
||||
description: Development | stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Development {#development}
|
||||
|
||||
## Running tests {#running-tests}
|
||||
|
||||
### With Docker {#with-docker}
|
||||
If you have Docker installed, simply run ./test. When you're done testing, run docker-compose down to shut down the containers.
|
||||
|
||||
### Without Docker {#without-docker}
|
||||
If you run the tests of this package, please make sure you don't store anything in Redis @ 127.0.0.1:6379 db#14. The contents of this database are flushed everytime the tests are run.
|
||||
|
||||
Some tests are run only if the CI, TRAVIS and CONTINUOUS_INTEGRATION environment variables are set to true. This is to avoid things like bloating your MySQL instance with test databases.
|
||||
9
source/docs/digging-deeper.md
Normal file
9
source/docs/digging-deeper.md
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
title: Digging Deeper
|
||||
description: Digging Deeper | stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Digging Deeper {#digging-deeper}
|
||||
|
||||
34
source/docs/getting-started.md
Normal file
34
source/docs/getting-started.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
---
|
||||
title: Getting Started
|
||||
description: Getting started with stancl/tenancy — A Laravel multi-database tenancy package that respects your code.
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Getting Started {#getting-started}
|
||||
|
||||
[**stancl/tenancy**](https://github.com/stancl/tenancy) is a Laravel multi-database tenancy package. It is designed in a way that requires you to make no changes to your codebase. Instead of applying traits on models and replacing every single reference to cache by a reference to a tenant-aware cache, the package lets you write your app without thinking about tenancy. It handles tenancy automatically.
|
||||
|
||||
> Note: Filesystem is the only thing that can be a little problematic. Be sure to read [that page](TODOfilesystem).
|
||||
|
||||
## How does it work? {#how-does-it-work}
|
||||
|
||||
A user visits `client1.yourapp.com`. The package identifies the tenant who this domain belongs to, and automatically does the following:
|
||||
- switches database connection
|
||||
- replaces the default cache manager
|
||||
- switches Redis connection
|
||||
- changes filesystem root paths
|
||||
|
||||
The benefits of this being taken care of by the package are:
|
||||
- separation of concerns: you should write your app, not tenancy implementations
|
||||
- reliability: you won't have to fear that you forgot to replace a reference to cache by a tenant-aware cache call. This is something you might worry about if you're implementing tenancy into an existing application.
|
||||
|
||||
## What is multi-tenancy? {#what-is-multi-tenancy}
|
||||
|
||||
Multi-tenancy is the ability to provide your application to multiple customers (who have their own users and other resources) from a single instance of your application. Think Slack, Shopify, etc.
|
||||
|
||||
Multi-tenancy can be single-database and multi-database.
|
||||
|
||||
**Single-database tenancy** means that your application uses only a single database. The way this is usually implemented is that instead of having the `id`, `title`, `user_id` and `body` columns in your `posts` table, you will also have a `tenant_id` column. This approach works until you need custom databases for your clients. It's also easy to implement, it basically boils down to having your models use a trait which adds a [global scope](https://laravel.com/docs/master/eloquent#global-scopes).
|
||||
|
||||
**Multi-database tenancy**, the type that this package provides, lets you use a separate database for each tenant. The benefits of this approach are scalability, compliance (some clients need to have the database on their server) and mitigation of risks such as showing the wrong tenant's data to a user. The downside is that this model is harder to implement, which is why this package exists.
|
||||
8
source/docs/index.html
Normal file
8
source/docs/index.html
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html lang="en-US">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="refresh" content="0; url=/docs/getting-started">
|
||||
<title>stancl/tenancy</title>
|
||||
</head>
|
||||
</html>
|
||||
65
source/docs/installation.md
Normal file
65
source/docs/installation.md
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
---
|
||||
title: Installation
|
||||
description: Installing stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Installation {#getting-started}
|
||||
|
||||
Laravel 5.8 or higher is needed.
|
||||
|
||||
### Require the package via composer
|
||||
|
||||
First you need to require the package using composer:
|
||||
|
||||
```
|
||||
composer require stancl/tenancy
|
||||
```
|
||||
|
||||
### Automatic installation {#automatic-installation}
|
||||
|
||||
To install the package, simply run
|
||||
|
||||
```
|
||||
php artisan tenancy:install
|
||||
```
|
||||
|
||||
You will be asked if you want to store your data in Redis or a relational database. You can read more about this on the [Storage Drivers](storage-drivers) page.
|
||||
|
||||
This will do all the steps listed in the [Manual installation](#manual-installation) section for you.
|
||||
|
||||
### Manual installation {#manual-installation}
|
||||
|
||||
If you prefer installing the package manually, you can do that too. It shouldn't take more than a minute either way.
|
||||
|
||||
#### Setting up middleware
|
||||
|
||||
Now open `app/Http/Kernel.php` and make the `InitializeTenancy` middleware top priority, so that it gets executed before anything else, making sure things like the database switch connections soon enough:
|
||||
|
||||
```php
|
||||
protected $middlewarePriority = [
|
||||
\Stancl\Tenancy\Middleware\InitializeTenancy::class,
|
||||
// ...
|
||||
];
|
||||
```
|
||||
|
||||
#### Creating routes
|
||||
|
||||
The package lets you have tenant routes and "exempt" routes. Tenant routes are your application's routes. Exempt routes are routes exempt from tenancy — landing pages, sign up forms, and routes for managing tenants.
|
||||
|
||||
Routes in `routes/web.php` are exempt, whereas routes in `routes/tenant.php` have the `InitializeTenancy` middleware automatically applied on them.
|
||||
|
||||
So, to create tenant routes, put those routes in a new file called `routes/tenant.php`.
|
||||
|
||||
#### Configuration
|
||||
|
||||
Run the following:
|
||||
|
||||
```
|
||||
php artisan vendor:publish --provider='Stancl\Tenancy\TenancyServiceProvider' --tag=config
|
||||
```
|
||||
|
||||
This creates a `config/tenancy.php`. You can use it to configure how the package works.
|
||||
|
||||
Configuration is explained in detail on the [configuration](configuration) page.
|
||||
20
source/docs/middleware-configuration.md
Normal file
20
source/docs/middleware-configuration.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
title: Middleware Configuration
|
||||
description: Middleware Configuration with stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Middleware Configuration {#middleware-configuration}
|
||||
|
||||
When a tenant route is visited and the tenant can't be identified, an exception is thrown. If you want to change this behavior, to a redirect for example, add this to your `app/Providers/AppServiceProvider.php`'s `boot()` method:
|
||||
|
||||
```php
|
||||
// use Stancl\Tenancy\Middleware\InitializeTenancy;
|
||||
|
||||
$this->app->bind(InitializeTenancy::class, function ($app) {
|
||||
return new InitializeTenancy(function ($exception) {
|
||||
// return redirect()->route('foo');
|
||||
});
|
||||
});
|
||||
```
|
||||
17
source/docs/stay-updated.md
Normal file
17
source/docs/stay-updated.md
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
---
|
||||
title: Stay Updated
|
||||
description: Stay Updated | stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Stay Updated {#stay-updated}
|
||||
|
||||
If you'd like to be notified about new versions, you can [sign up for e-mail notifications](https://stancl.github.io/tenancy/#stay-updated) or join our [Telegram channel](https://t.me/joinchat/AAAAAFjdrbSJg0ZCHTzxLA).
|
||||
|
||||
You can choose whether you want to receive emails about major versions and/or minor versions.
|
||||
|
||||
- Major versions include breaking changes. Composer won't know about these versions and won't update to them. Major versions will be released about once every 6 months.
|
||||
- Minor versions include backwards-compatible features and bug fixes.
|
||||
|
||||
<!-- todo mailchimp dialog -->
|
||||
50
source/docs/storage-drivers.md
Normal file
50
source/docs/storage-drivers.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
---
|
||||
title: Storage Drivers
|
||||
description: Storage Drivers of stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Storage Drivers {#storage-drivers}
|
||||
|
||||
Storage drivers are used to store a list of all tenants, their domains and any extra information you store about your tenants (e.g. their plan).
|
||||
|
||||
Currently, database and Redis storage drivers are available as part of the package. However, you can [write your own](writing-storage-drivers) (and contribute ❤️) storage drivers.
|
||||
|
||||
## Database {#database}
|
||||
|
||||
The database storage driver lets you store tenant information in a relational database like MySQL, PostgreSQL and SQLite.
|
||||
|
||||
The benefit of this storage driver is that you don't have ot use both Redis and a database for your data. Also you don't have to do as much configuration.
|
||||
|
||||
To use this driver, you need to have a `tenants` table in the database associated with the `central` connection. So copy your currenty used connection (`mysql`, `sqlite`, ...) and add it to `database.connections` under the name `central`.
|
||||
|
||||
To create the `tenants` table, you can use the migration that comes with this package. If you haven't published it during the installation, publish it now:
|
||||
```
|
||||
php artisan vendor:publish --provider='Stancl\Tenancy\TenancyServiceProvider' --tag=migrations
|
||||
```
|
||||
|
||||
By default, all of your data will be stored in the JSON column `data`. If you want to store some data in a dedicated column (to leverage indexing, for example), add the column to the migration and to `tenancy.custom_columns` config.
|
||||
|
||||
## Redis {#redis}
|
||||
|
||||
The Redis storage driver lets you store tenant information in Redis, a high-performance key-value store.
|
||||
|
||||
The benefit of this storage driver is its performance.
|
||||
|
||||
**Note that you need to configure persistence on your Redis instance if you don't want to lose all information about tenants.**
|
||||
|
||||
Read the [Redis documentation page on persistence](https://redis.io/topics/persistence). You should definitely use AOF and if you want to be even more protected from data loss, you can use RDB **in conjunction with AOF**.
|
||||
|
||||
If your cache driver is Redis and you don't want to use AOF with it, run two Redis instances. Otherwise, just make sure you use a different database (number) for tenancy and for anything else.
|
||||
|
||||
To use this driver, create a new Redis connection in the `database.redis` configuration called `tenancy`.
|
||||
|
||||
```php
|
||||
'tenancy' => [
|
||||
'host' => env('TENANCY_REDIS_HOST', '127.0.0.1'),
|
||||
'password' => env('TENANCY_REDIS_PASSWORD', null),
|
||||
'port' => env('TENANCY_REDIS_PORT', 6380), // different port = separate Redis instance
|
||||
'database' => env('TENANCY_REDIS_DB', 3), // alternatively, different database number
|
||||
],
|
||||
```
|
||||
28
source/docs/tenant-routes.md
Normal file
28
source/docs/tenant-routes.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
title: Tenant Routes
|
||||
description: Tenant routes with stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Tenant Routes {#tenant-routes}
|
||||
|
||||
Routes within `routes/tenant.php` will have the `web` middleware group and the `IntializeTenancy` middleware automatically applied on them. This middleware attempts to identify the tenant based on the current hostname. Once the tenant is identified, the database connection, cache, filesystem root paths and, optionally, Redis connection, will be switched.
|
||||
|
||||
Just like `routes/web.php`, these routes use the `App\Http\Controllers` namespace.
|
||||
|
||||
> If a tenant cannot be identified, anexception will be thrown. If you want to change this behavior (to a redirect, for example) read the [Middleware Configuration](middleware-configuration) page.
|
||||
|
||||
## Exempt routes {#exempt-routes}
|
||||
|
||||
Routes outside the `routes/tenant.php` file will not have the tenancy middleware automatically applied on them. You can apply this middleware manually, though.
|
||||
|
||||
If you want some of your, say, API routes to be multi-tenant, simply wrap them in a Route group with this middleware:
|
||||
|
||||
```php
|
||||
use Stancl\Tenancy\Middleware\InitializeTenancy;
|
||||
|
||||
Route::middleware(InitializeTenancy::class)->group(function () {
|
||||
// Route::get('/', 'HelloWorld');
|
||||
});
|
||||
```
|
||||
48
source/docs/tenant-storage.md
Normal file
48
source/docs/tenant-storage.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
---
|
||||
title: Tenant Storage
|
||||
description: Tenant storage with stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Tenant Storage {#tenant-storage}
|
||||
|
||||
Tenant storage is where tenants' uuids and domains are stored. You can store things like the tenant's plan, subscription information, and tenant-specific application configuration in tenant storage. You can use these functions:
|
||||
```php
|
||||
get (string|array $key, string $uuid = null) // $uuid defaults to the current tenant's UUID
|
||||
put (string|array $key, mixed $value = null, string $uuid = null) // if $key is array, make sure $value is null
|
||||
```
|
||||
|
||||
To put something into the tenant storage, you can use `put()` or `set()`.
|
||||
```php
|
||||
tenancy()->put($key, $value);
|
||||
tenancy()->set($key, $value); // alias for put()
|
||||
tenancy()->put($key, $value, $uuid);
|
||||
tenancy()->put(['key1' => 'value1', 'key2' => 'value2']);
|
||||
tenancy()->put(['key1' => 'value1', 'key2' => 'value2'], null, $uuid);
|
||||
```
|
||||
|
||||
To get something from the storage, you can use `get()`:
|
||||
|
||||
```php
|
||||
tenancy()->get($key);
|
||||
tenancy()->get($key, $uuid);
|
||||
tenancy()->get(['key1', 'key2']);
|
||||
```
|
||||
|
||||
> Note: `tenancy()->get(['key1', 'key2'])` returns an array with values only
|
||||
|
||||
Note that $key has to be a string or an array with string keys. The value(s) can be of any data type. Example with arrays:
|
||||
|
||||
```php
|
||||
>>> tenant()->put('foo', ['a' => 'b', 'c' => 'd']);
|
||||
=> [ // put() returns the supplied value(s)
|
||||
"a" => "b",
|
||||
"c" => "d",
|
||||
]
|
||||
>>> tenant()->get('foo');
|
||||
=> [
|
||||
"a" => "b",
|
||||
"c" => "d",
|
||||
]
|
||||
```
|
||||
20
source/docs/usage.md
Normal file
20
source/docs/usage.md
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
title: Usage
|
||||
description: Usage | stancl/tenancy — A Laravel multi-database tenancy package that respects your code..
|
||||
extends: _layouts.documentation
|
||||
section: content
|
||||
---
|
||||
|
||||
# Usage {#usage}
|
||||
|
||||
This chapter describes usage of the package. That includes creating tenants, deleting tenants, storing data in the tenant storage.
|
||||
|
||||
Most pages will use the `tenancy()` helper function. This package comes with two helpers - `tenancy()` and `tenant()`. They do the same thing, so you can use the one that reads better given its context.
|
||||
|
||||
`tenant()->create()` reads better than `tenancy()->create()`, but `tenancy()->init()` reads better than `tenant()->init()`.
|
||||
|
||||
You can pass an argument to the helper function to get a value out of the tenant storage. `tenant('plan')` is identical to [`tenant()->get('plan')`](tenant-storage).
|
||||
|
||||
The package also comes with two facades. `Tenancy` and `Tenant`. Use what feels the best.
|
||||
|
||||
Both the helpers and the facades resolve the `TenantManager` from the service container.
|
||||
Loading…
Add table
Add a link
Reference in a new issue