まだLaravelにはまだ新しいImは、基本的なLaracastのいくつかを使って作業しています。今私は最初のララベルプロジェクトを始めていますが、私は最初のパッケージ "Landlord"の使い方について固執しています。基本的に私のアプリケーションではマルチテナントの設定が必要です。私は会社のテーブルとユーザーテーブルを持っています、ユーザーテーブルはcompany_idの列を持っています。ある企業が登録すると、企業が正常に作成され、company_idがそのユーザーに割り当てられます。Laravel Packageの使い方LandLord
私は、家主がマルチテナントアプリケーションを実装する最良の方法だと考えていますので、インストール手順を練ったので、私はそれを自分のアプリに含めました。
ただし、USAGEセクションの最初の行には、 と記載されています。注意:所有者は無国籍です。つまり、addTenant()を呼び出すと、現在の要求のスコープのみが使用されます。
は、あなたがそれ は、リクエストごとに起こるような方法であなたのテナントを追加していることを確認し、あなたが必要とする前に、モデル ミドルウェアやOAuthのようなステートレスな認証方法の一部としてのように、スコープ。
ファサードLandlord::addTenant('tenant_id', 1);
を添付する必要があります。
これは私が見落としているかなり単純な答えかもしれませんが、どこでaddTenant
を使用するのが最適な場所であり、すべてのコントローラまたはモデルで再宣言する必要がありますか?ユーザーがサインインしたり、ルートで使用したり、ミドルウェアとして使用したりするときに、それを添付する必要がありますか?ミドルウェアの場合は、現在のユーザーからcompany_idを取得してaddTenant
と一緒に使用するには、次の正しい点がありますか?
ミドルウェア:
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 –