[Laravel 8.x] Multi-Tenant implementation with hyn/multi-tenant

### プロジェクト作成
$ composer create-project –prefer-dist laravel/laravel tenancy-demo
$ cd tenancy-demo
$ composer require hyn/multi-tenant

### mysql driverインストール
$ composer require tenancy/db-driver-mysql
Problem 1
– tenancy/db-driver-mysql[v1.3.0, …, 1.x-dev] require doctrine/dbal ^2.9 -> found doctrine/dbal[v2.9.0, …, 2.13.x-dev] but the package is fixed to 3.1.1 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
– Root composer.json requires tenancy/db-driver-mysql ^1.3 -> satisfiable by tenancy/db-driver-mysql[v1.3.0, 1.x-dev].

doctrine/dbalを2系でインストールする必要がありそう。

$ composer require “doctrine/dbal:2.*”
$ composer require tenancy/db-driver-mysql
今度は上手くいきました。

config/app.php

    'providers' => [
        // 省略
        Hyn\Tenancy\Providers\TenancyProvider::class,
        Hyn\Tenancy\Providers\WebserverProvider::class,

    ],

file update
$ php artisan vendor:publish –tag tenancy

config/database.php
L connectionでmysqlをコピペしてsystemを追加します。

    'connections' => [

        'system' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'tenancy'),
            'username' => env('DB_USERNAME', 'hoge'),
            'password' => env('DB_PASSWORD', 'fuga'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],
    ],

.env

TENANCY_HOST=127.0.0.1
TENANCY_PORT=3306
TENANCY_DATABASE=tenancy_demo
TENANCY_USERNAME=hoge
TENANCY_PASSWORD=fuga

mysql> create database tenancy_demo;
Query OK, 1 row affected (0.01 sec)

$ php artisan migrate –database=system
Migrating: 2017_01_01_000003_tenancy_websites
Migrated: 2017_01_01_000003_tenancy_websites (16.88ms)
Migrating: 2017_01_01_000005_tenancy_hostnames
Migrated: 2017_01_01_000005_tenancy_hostnames (44.02ms)
Migrating: 2018_04_06_000001_tenancy_websites_needs_db_host
Migrated: 2018_04_06_000001_tenancy_websites_needs_db_host (12.21ms)

### Trying your installation
multi tenantのテストを行うには、apacheかlaravel Valetでテストする必要がある
localhost:[any_port] では動かない
tenant.system.extension でないとダメ

なんだとおおおおおおおおおおおおお
どうりでphp artisan serveでvagrant環境で動かないと思った。
うーん、困った。さくらVPSでテストするか。
というか、Laravel Valetってなんだ??

### laravel valetとは?
macOSミニマリスト向けのLaravel開発環境
https://readouble.com/laravel/8.x/ja/valet.html

うーむ、結局apacheでやらないと駄目そうだな。。