【问题标题】:Eloquent queries without database (data is retrieved from external API)没有数据库的雄辩查询(从外部 API 检索数据)
【发布时间】:2020-06-03 11:48:06
【问题描述】:

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

当用户使用网站上的登录表单登录时。向 API 发出一个 post 请求。当登录请求成功时,会以 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 子域的 store 方法中。

【问题讨论】:

标签: php laravel eloquent


【解决方案1】:

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

看一看 Laravel 如何实现它目前支持的数据库类型。 https://laravel.com/api/5.8/Illuminate/Database/Schema/Grammars.html

【讨论】:

  • 这应该比在主网站上创建带有迁移的重复表更少工作。
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
相关资源
最近更新 更多