Php Laravel 7 sanctum数据库连接问题

Php Laravel 7 sanctum数据库连接问题,php,mysql,sql-server,laravel,laravel-7,Php,Mysql,Sql Server,Laravel,Laravel 7,我正在使用Sanctum laravel软件包制作API项目。它需要连接2个数据库服务器。一个是MySQL,用于保存包括登录用户在内的一些数据。另一个是SQL Server,用于获取API路由的数据。在MySQL数据库服务器中登录Sanctum并没有问题,我已经对登录进行了测试,并得到了令牌。当我在不使用Laravel Sanctum的情况下检索数据时,从SQL Server检索数据也能很好地工作 我需要从MySQL数据库服务器进行登录检查,并从SQL server数据库服务器检索数据。我现在面

我正在使用Sanctum laravel软件包制作API项目。它需要连接2个数据库服务器。一个是MySQL,用于保存包括登录用户在内的一些数据。另一个是SQL Server,用于获取API路由的数据。在MySQL数据库服务器中登录Sanctum并没有问题,我已经对登录进行了测试,并得到了令牌。当我在不使用Laravel Sanctum的情况下检索数据时,从SQL Server检索数据也能很好地工作

我需要从MySQL数据库服务器进行登录检查,并从SQL server数据库服务器检索数据。我现在面临的问题是如何以及在何处定义MySQL数据库服务器对Sanctum auth中间件的需求

连接如下所示:

DB_MYSQL_CONNECTION=mysql
DB_MYSQL_HOST=127.0.0.1
DB_MYSQL_PORT=3306
DB_MYSQL_DATABASE=api
DB_MYSQL_USERNAME=root
DB_MYSQL_PASSWORD=

DB_SQLSRV_CONNECTION=sqlsrv
DB_SQLSRV_HOST=127.0.0.1
DB_SQLSRV_PORT=1433
DB_SQLSRV_DATABASE=StoreData
DB_SQLSRV_USERNAME=sa
DB_SQLSRV_PASSWORD=
那条路线

Route::middleware(['auth:sanctum'])->group(function () {  
    Route::get('/items', 'APIController@getAllItems');
});
记录成功后,我使用auth token运行它,得到如下错误:

DB_MYSQL_CONNECTION=mysql
DB_MYSQL_HOST=127.0.0.1
DB_MYSQL_PORT=3306
DB_MYSQL_DATABASE=api
DB_MYSQL_USERNAME=root
DB_MYSQL_PASSWORD=

DB_SQLSRV_CONNECTION=sqlsrv
DB_SQLSRV_HOST=127.0.0.1
DB_SQLSRV_PORT=1433
DB_SQLSRV_DATABASE=StoreData
DB_SQLSRV_USERNAME=sa
DB_SQLSRV_PASSWORD=
Illumb\Database\QueryException:SQLSTATE[42S02]:[Microsoft][ODBC SQL Server][SQL Server]的驱动程序11对象名称无效 “个人访问令牌”。SQL:从中选择前1* [个人访问令牌]其中[令牌]= BD1DE1DF8BC2C289DBD89F7D640A4C65EBC1B709B565EE500315EE710F12B62英寸 文件 …\vendor\laravel\framework\src\illumb\Database\Connection.php打开 第671行

个人访问令牌和用户表位于MySQL数据库中。
我可以为Sanctum Auth自定义哪个db连接吗?怎么做呢?

您需要对个人访问令牌进行一些定制。创建一个名为SanctumPersonalAccessClientwhat的普通模型在本例中,在AuthServiceProvider.php中编写

namespace App\Providers;

use Laravel\Sanctum\Sanctum;
use App\SanctumPersonalAccessClient as PersonalAccessClient;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        //
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
        Sanctum::usePersonalAccessClientModel(PersonalAccessClient::class);
    }
}
然后在刚刚创建的模型中,只需如下设置连接和表名:

namespace App;
use Laravel\Sanctum\PersonalAccessClient;

class SanctumPersonalAccessClient extends PersonalAccessClient
{
    protected $connection = 'my_custom_connection';
    protected $table = 'personal_access_tokens';
}

有用的链接,但带有passport:

您需要一些自定义的个人访问令牌。创建一个名为SanctumPersonalAccessClientwhat的普通模型在本例中,在AuthServiceProvider.php中编写

namespace App\Providers;

use Laravel\Sanctum\Sanctum;
use App\SanctumPersonalAccessClient as PersonalAccessClient;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        //
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();
        Sanctum::usePersonalAccessClientModel(PersonalAccessClient::class);
    }
}
然后在刚刚创建的模型中,只需如下设置连接和表名:

namespace App;
use Laravel\Sanctum\PersonalAccessClient;

class SanctumPersonalAccessClient extends PersonalAccessClient
{
    protected $connection = 'my_custom_connection';
    protected $table = 'personal_access_tokens';
}

有用的链接,但带有passport:

当我添加连接变量protected$connection='mysql'时;直接在vendor/laravel/sanctum/src/PersonalAccessToken中,它运行良好。有没有办法在我的项目中覆盖这个PersonalAccessToken模型,而不是更新供应商源下的文件;直接在vendor/laravel/sanctum/src/PersonalAccessToken中,它运行良好。有没有办法在我的项目中覆盖此PersonalAccessToken模型,而不是更新供应商源下的文件?Wooo@那真是太好了。谢谢。当我更改Sanctum::usePersonalAccessTokenModelPersonalAccessToken::class时,它可以工作;而不是Sanctum::usePersonalAccessClientModelPersonalAccessClient::class;在AuthServiceProvider中使用“PersonalAccessToken”,而不是在我的新型号中使用“PersonalAccessClient”。Wooo@那真是太好了。谢谢。当我更改Sanctum::usePersonalAccessTokenModelPersonalAccessToken::class时,它可以工作;而不是Sanctum::usePersonalAccessClientModelPersonalAccessClient::class;在AuthServiceProvider中使用“PersonalAccessToken”,而不是在我的新模型中使用“PersonalAccessClient”。