solutosoft / yii-multitenant
The shared database used by all tenants
Installs: 1 914
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 2
Forks: 2
Open Issues: 0
Type:yii-extension
Requires
- yiisoft/yii2: ~2.0.16
Requires (Dev)
- phpunit/phpunit: ~4.4
This package is auto-updated.
Last update: 2024-10-27 00:33:47 UTC
README
This extension provides support for ActiveRecord MultiTenant.
Installation
The preferred way to install this extension is through composer.
Either run
php composer.phar require --prefer-dist solutosoft/yii-multitenant
or add
"solutosoft/yii-multitenant": "*"
Usage
- Creates table with
tenant_id
column:
class m191023_101232_create_post extends Migration { /** * {@inheritdoc} */ public function up() { $this->createTable('post', [ 'id' => $this->primaryKey(), 'title' => $this->string()->notNull(), 'category_id' => $this->integer(), 'content' => $this->string() 'tenant_id' => $this->integer(), ]); $this->createTable('category', [ 'id' => $this->primaryKey(), 'name' => $this->string()->notNull(), 'tenant_id' => $this->integer(), ]); } }
- Adds
TenantInterface
to user model:
use solutosoft\multitenant\MultiTenantRecord; class User extends MultiTenantRecord implements IdentityInterface, TenantInterface { /** * {@inheritdoc} */ public function getTenantId() { return // logic to determine tenant from current user } /** * Finds user by username attribute * This is an example where tenant filter is disabled */ public static function findByUsername($username) { return static::find()->withoutTenant()->where(['username' => $username]); } ... }
- Extends models with
tenant_id
attribute fromMultiTenantRecord
intead ofActiveRecord
:
use solutosoft\multitenant\MultiTenantRecord; class Post extends MultiTenantRecord { ... } class Category extends MultiTenantRecord { ... }
Now when you save or execute some query the tenant_id
column will be used. Example:
// It's necessary the user will be logged in $posts = \app\models\Post::find()->where(['category_id' => 1])->all(); // SELECT * FROM `post` WHERE `category_id` = 1 and `tenant_id` = 1; $category = \app\models\Category([ 'name' => 'framework' ]); $category->save(); // INSERT INTO `category` (`name`, `tenant_id`) values ('framework', 1);