Im все еще довольно новый для Laravel и проработал некоторые фундаментальные ларакасты. Теперь я начинаю свой первый проект laravel, но я зациклился на том, как использовать свой первый пакет «Landlord». В основном мне нужна настройка для Multi-Tenants в моем приложении. У меня есть таблица компании и таблица пользователей, таблица пользователя имеет столбец company_id. Когда компания регистрирует его, он успешно создает компанию и присоединяет company_id к пользователю.Как использовать Laravel Package LandLord
Я предполагаю, что Арендодатель является наилучшим способом реализации приложения с несколькими арендаторами, поэтому я работал с инструкциями по установке, и теперь я включил его в свое приложение.
Однако первая строка в разделе ИСПОЛЬЗОВАНИЕ говорит: ВАЖНОЕ ПРИМЕЧАНИЕ: Арендодатель не имеет гражданства. Это означает, что при вызове addTenant() он будет обрабатывать только текущий запрос.
Убедитесь, что вы добавляете ваши арендатор таким образом, что это происходит при каждом запросе, и, прежде чем вы должны Models области видимости, как в промежуточного слоя или в качестве части лица без метода аутентификации, как OAuth.
И похоже, мне нужно прикрепить фасад Landlord::addTenant('tenant_id', 1);
.
Это может быть довольно простой ответ, который я просматриваю, но где лучше всего использовать addTenant
и нужно ли его обновлять с помощью каждого контроллера или модели? Должен ли я прикреплять его, когда пользователь подписывается, использует его на своих маршрутах или использует в качестве промежуточного программного обеспечения? Если это промежуточное программное обеспечение, то верно следующее: чтобы вытащить company_id от текущего пользователя и использовать его с помощью addTenant
?
Middleware:
public function handle($request, Closure $next){
$tenantId = Auth::user()->tenant_id;
Landlord::addTenant('tenant_id', $tenantId);
return $next($request);
}
UPDATE
Вот мой промежуточного слоя (MultiTenant.php)
<?php
namespace App\Http\Middleware;
use Closure;
use App\User;
use Illuminate\Support\Facades\Auth;
class MultiTenant
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (Auth::check()) {
$tenantId = Auth::user()->company_id;
Landlord::addTenant('company_id', $tenantId); // Different column name, but same concept
}
return $next($request);
}
}
Мои маршруты/web.php
<?php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of the routes that are handled
| by your application. Just tell Laravel the URIs it should respond
| to using a Closure or controller method. Build something great!
|
*/
Route::get('/', function() {
return view('welcome');
});
Auth::routes();
Route::group(['middleware' => ['multitenant']], function() {
Route::get('/home', '[email protected]');
//Clients
Route::resource('clients', 'ClientController');
});
Мои Client.php Модель:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use HipsterJazzbo\Landlord\BelongsToTenants;
class Client extends Model
{
use BelongsToTenants;
//
protected $fillable = [
'organization',
];
}
https://github.com/HipsterJazzbo/Landlord#user-content-usage
Если все ваши таблицы с данными арендаторов имеют ключ «tenant_id», то все они будут запрашиваться с глобальным дополнительным глобальным охватом 'WHERE'' tenant_id = ID' (конечно, если у них есть свойство «BelongsToTenants»). И да, промежуточное ПО - лучшее место для добавления арендаторов, imho –