Laravel7 orchestral/tenanti with multiple databases not working

孤街醉人 提交于 2020-12-15 06:03:48

问题


Can anyone please help on this.

Tenanti Version: ^5.0 Laravel Version: 7.x PHP Version: 7.4 Database Driver & Version: mysql-5.7.31

Description: When I install tenanti version getting an error in service provider.

Illuminate\Contracts\Container\BindingResolutionException
Unable to resolve dependency [Parameter #1 [ array $config ]] in class App\Providers\AppServiceProvider

Steps To Reproduce:

"orchestra/tenanti": "^5.0",

In appServiceProvider page added like below. I have removed my code and showing Where i have added Tenant code. Please excuse.

use Orchestra\Support\Facades\Tenanti;

public function boot()
    {
       
        Tenanti::connection('tenants', function (Subdomain $entity, array $config) { 
             //var_dump($entity);die;
            $config['database'] = "sc_{$entity->domain_name}";
            return $config;
        });
    }

In App/Config/Orchestra/tenanti.php

<?php

return [

    /*
     |----------------------------------------------------------------------
     | Queue Configuration
     |----------------------------------------------------------------------
     |
     | Set queue connection name to be use for running all the queues.
     |
     */
    'queue' => env('TENANTI_QUEUE_CONNECTION', 'default'),

    /*
    |----------------------------------------------------------------------
    | Driver Configuration
    |----------------------------------------------------------------------
    |
    | Setup your driver configuration to let us match the driver name to
    | a Model and path to migration.
    |
    */

    'drivers' => [
        'user' => [
            'model' => App\Models\Subdomain::class,
            'paths' => [
                database_path('tenant/users'),
            ],
            'shared' => true,
        ],
    ],
];

In database\tenant\users added migration files.

in App/Http/Observer added UserObserver

namespace App\Observers;

use Orchestra\Tenanti\Observer;

class UserObserver extends Observer
{
    public function getDriverName()
    {
        return 'user';
    }
}

In database.php

'tenants' => [               
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', ''),
            'port'      => env('DB_PORT', '3306'),
            'database'  => '',
            'username'  => env('DB_USERNAME', ''),
            'password'  => env('DB_PASSWORD', ''),
            'charset'   => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
            'contype'=>'tenant',
        ],

In Middleware I have called like below

use DB;
use App\Models\Subdomain;
use Orchestra\Support\Facades\Tenanti;

//$subDomainDetails Object
**object(App\Models\Subdomain)[1308]
  protected 'connection' => string 'mysql' (length=5)
  protected 'table' => string 'subdomains' (length=10)
  protected 'primaryKey' => string 'id' (length=2)
  protected 'keyType' => string 'int' (length=3)
  public 'incrementing' => boolean true
  protected 'with' => 
    array (size=0)
      empty
  protected 'withCount' => 
    array (size=0)
      empty
  protected 'perPage' => int 15
  public 'exists' => boolean true
  public 'wasRecentlyCreated' => boolean false
  protected 'attributes' => 
............
);**
$subDomainDets = Subdomain::where('domain_name', $subdomain)->first();
 Tenanti::driver('user')->asDefaultConnection($subDomainDets, config('DB_PREFIX').$subdomainname);

Same code worked Perfectly when I have Laravel 5.4. "orchestra/tenanti": "^3.0",

Now I have upgraded my php version to 7.4 and upgraded "laravel/framework": "^7.0" version and orchestra/tenanti: ^5.0

Composer installed successfully.

After i run Subdomain Its not connecting to tenant db. Getting error like below.

Illuminate\Contracts\Container\BindingResolutionException Unable to resolve dependency [Parameter #1 [ array $config ]] in class App\Providers\AppServiceProvider

In vendor/orchestra/tenenti/src/Migrator/Operation.php I have checked the code.

Until this line code is executing correctly but after that getting that error.

if (! \is_null($tenants) && \is_null($repository->get($name))) {
            echo "executing this line";
            $config = $this->app->call($tenants['resolver'], [
                'entity' => $entity,
                'template' => $tenants['template'],
                'connection' => $connection,
                'migrator' => $this,
            ]);
           echo "not executing this line. may be issue with above code.";
var_dump($config);
            $repository->set($name, $config);
        }

来源:https://stackoverflow.com/questions/64887936/laravel7-orchestral-tenanti-with-multiple-databases-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!