This extension provides support for ActiveRecord MultiTenant.
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": "*"
- 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);