Laravel使用API请求时调用错误的表

niknxzdl  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(98)

我在本地电脑上有两个Web应用程序。

  1. abc.test使用名为abc的数据库,
  2. def.test,使用名为def的数据库,
    我的主要目标是检索位于def.test数据库中的status。使用abc.test
    下面是来自abc.test代码
public function create(): View
        {
            if(!session()->has('license')){
                $response = $this->client->request('POST', 'http://def.test/api/service',[
                    'form_params' => [
                        'license_key' => base64_encode(config('def.license'))
                    ],
                ]);
            }
            return view('auth.login');
        }

and then here is `def.test` controller to handle the request

    public function getSubs(Request $request)
        {
            $license = $this->decryptLicense($request->license_key);
            $subs = Subscription::query()->select('service_id', 'status', 'expired_date')->where('license_key', $license)->first();
            $data = [
                'services' => $subs->service->name,
                'status' => $subs->status,
                'expired_date' => date('d/m/Y', strtotime($subs->expired_date)),
            ];
            return response()->json(['data' => $data]);
        }

当使用Postman时,它工作得很好。但是,当使用abc.test时,它在Laravel日志中显示此错误

(PDOException(code: 42S02): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'abc.subscriptions' doesn't exist at D:\\Program\\laravel\\lausystems\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection.php:416)

谢谢你的回答

rxztt3cl

rxztt3cl1#

设置连接名称(单据多DB连接)

DB::connection('abc')->table('statuses').....

更新:

//服务器1(abc服务器)

//Server 1 (abc Server)
'mysql' => [ // I'll use mysql for default
    'host' 'localhost';
    'sticky' => true,
    'driver' => 'mysql',
    'database' => 'abc',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
],
'def' => [
    'host' '1.1.1.2'; // IP server 2
    'sticky' => true,
    'driver' => 'mysql',
    'database' => 'def',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
],

//服务器2(def服务器)

//Server 2 (def Server)
'mysql' => [ // I'll use mysql for default
    'host' 'localhost';
    'sticky' => true,
    'driver' => 'mysql',
    'database' => 'def',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
],
'abc' => [
    'host' '1.1.1.1'; // IP Server 1
    'sticky' => true,
    'driver' => 'mysql',
    'database' => 'def',
    'username' => 'root',
    'password' => '',
    'charset' => 'utf8mb4',
    'collation' => 'utf8mb4_unicode_ci',
    'prefix' => '',
],

或者你可以合并两个服务器上的两个连接。
不要忘记授予对服务器的访问权限(MySQL)(这样服务器1可以与服务器2通信,反之亦然)

相关问题