hipsterjazzbo / Landlord

A simple, single database multi-tenancy solution for Laravel 5.2+
MIT License
614 stars 138 forks source link

Multiple tenants of the same type #27

Closed shadoWalker89 closed 7 years ago

shadoWalker89 commented 8 years ago

Hi,

The idea is the following. A Teacher model can belong to multiple Schools at the same time.

Having school_id on the teachers table will not be enough.

Is it possible to support storing tenant values in a pivot table ?

shadoWalker89 commented 8 years ago

@HipsterJazzbo ping

tnorthcutt commented 8 years ago

This trait for Laravel Spark by @dillinghamio may be of interest, since Spark functions that way (a User can belong to multiple Teams).

shadoWalker89 commented 8 years ago

@tnorthcutt The trait doesn't allow multiple teams. It has basically the same functionality as this package.

hipsterjazzbo commented 7 years ago

That's outside the scope of this package. This package is specifically designed to make it easy to segregate entities into single boxes. Having said that, it might work?

anhhuy2000 commented 5 years ago

Hi,

I am having the same issue. This is my scenario

Contact can register for multiple events and event has many Contacts Contact Table id Event Table id Contact_Event table id contact_id event_id

In my Contact model, I have this relationship defined public function contactEvents() { return $this->hasMany(\App\Models\ContactEvent::class); }

This is what I have done and it worked for me (note that I am very new to Laravel so not sure if my solution is a good solution) Introduce a new variable in the Contact table, or any table that has the Many to Many relationship with pivot table public $tenantPivotTable = 'contactEvents'; //(note that the value of this variable is the relationship defined in the model

Add a new function in the Hipster BelongsToTenants.php file to get the relationship public function getTenantPivotTable() { return isset($this->tenantPivotTable) ? $this->tenantPivotTable : null; }

Modify functions public function applyTenantScopes(Model $model) and public function applyTenantScopesToDeferredModels() by removing this line $builder->where($model->getQualifiedTenant($tenant), '=', $id); and replacing it by if ($model->getTenantPivotTable()) { $builder->has($model->getTenantPivotTable()); /$builder->whereHas($model->getTenantPivotTable(), function($query) use ($model, $tenant, $id) {
//$query->where($model->getQualifiedTenant($tenant), '=', $id);
});
/ } else { $builder->where($model->getQualifiedTenant($tenant), '=', $id); } That's it. I can now filter Many to Many relationship using pivot table.

Hope it helps.