无需数据库的雄辩查询(数据是从外部API检索的)

时间:2020-02-19 10:25:55

标签: php laravel eloquent

我有一个Laravel Web应用程序(website.nl)和一个Laravel API(api.website.nl)。

当用户使用网站上的登录表单登录时。向API发出了发布请求。登录请求成功后,将以JSON字符串的形式发送回令牌AND用户对象。登录方法如下所示。

public function login(Request $request)
{
    $email = $request->input('email');
    $password = $request->input('password');

    $response = $this->client->request('POST', self::$apiRootUrl . '/login', [
        'headers'     => [
            'Accept' => 'application/json',
        ],
        'form_params' => [
            'email'    => $email,
            'password' => $password
        ],
    ]);

    $result = json_decode($response->getBody()->getContents());

    if (isset($result->success->token))
    {
        $user = User::create([
            'id'    => $result->success->user->id,
            'name'  => $result->success->user->name,
            'email' => $result->success->user->email,
            'password' => $password
        ]);
        Auth::login($user);
        $this->apiToken = $result->success->token;

        return $this->sendLoginResponse($request);
    }

    return $this->sendFailedLoginResponse($request);
}

在我希望此登录功能尽可能愚蠢的地方,这意味着让API弄清楚这是否是有效的登录请求。此方法仅传递参数。

主网站应该没有数据库。它仅使用API​​登录,获取令牌,并使用该令牌进行请求以收集数据,以供用户在主网站的仪表板上查看。

基于这个原因,我的问题是:如何存储从API检索到的User对象,使其像Eloquent模型一样可以查询。但无需将其存储在数据库中。同样,主要网站不需要数据库。它仅与API进行数据通信。

我希望这个问题有意义,否则请询问更多细节。

我不想在主网站上创建带有迁移的重复数据库。因为那是.api子域的工作。同样,所有模型都在会话中使用。永远不会存储更长的时间,因为它也位于.api子域的存储方法中。

1 个答案:

答案 0 :(得分:0)

这将需要您为Eloquent编写自己的语法,Eloquent是您正在使用的API的ActiveRecord实现。 从理论上讲这是可能的,实际上,这是很多工作。

在这里了解Laravel如何实现其当前支持的数据库类型。 https://laravel.com/api/5.8/Illuminate/Database/Schema/Grammars.html