php - AWS MySQL 是否缓存数据?拉拉维尔 5

标签 php mysql api amazon-web-services laravel-5

我正在创建一个简单的 API 端点,它返回事件的访问代码。

如果事件没有访问代码,则会为其分配一个保存在数据库中。然后,它检查当前是公共(public)的还是私有(private)的。如果是私有(private)的,则返回访问代码,如果是公共(public)的,则返回空字符串。

这是端点 Controller :

public function getAc($eventId) {
    // Pull event
    $event = $this->eventService->api->getEventForce($eventId);

    // If no access code for the event, generate one and update event record accordingly
    if ($event->access_code == null) {

        $access_code = $this->generateAccessCode();
        DB::update('update events set access_code = ? where id = ?', [$access_code, $eventId]);

        // Load updated event from DB.
        $event = $this->eventService->api->getEventForce($eventId);
    }

    // Is the event currently private? return access code
    if ($event->privacy=='private') {
        return $event->access_code; // HERE: value comes back from the API but on MySQL Workbench it's still null.
    }

    // Is it public ? return empty string.
    else {
        return '';
    }
}

我的问题是,即使一切都按预期进行。当 access_code 创建时,它确实会从 API 返回。

但是当我检查 MySQL Workbench(连接到 AWS 实例)上的记录时,它仍然为空!事件,尽管我使用 API 端点将其作为非空值从数据库中提取出来。

最佳答案

对你的代码有点困惑。通过调试,我建议检查您的 API 是否存在此问题。据我所知,你正在这样做:

  1. 向 API 请求 ID 为 1 的事件
  2. 检查事件是否有参数
  3. 如果没有参数,则使用本地DB更新

所以我要问,如果问题出在 API 上,为什么要使用数据库的本地实例进行更新?此外,可以使用事件来解决这个问题吗? (我将把你的类称为事件以外的其他名称,以免混淆)

例如:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Party extends Model {
    public $table = 'parties';
    public $fillable = [];

    public static function boot() {
        parent::boot();

        static::creating(function($party) {
            //create some fancy access code
            $access_code = 'heyyyy';
            //Check not manually set 
            if (!isset($party->attributes['access_code']) || is_null($party->attributes['access_code'])) {
                $party->access_code = $access_code;
            }
        }
    }
}

现在,每次您使用 Party::create();$party = new Party; 创建事件或“派对”时$party->save(); creating 事件将获取保存并分配 access_code(如果您没有像 $party->access_code = 那样手动设置) '你不能来';.

无论如何,这就是我的想法。然而,就您当前的情况而言,我认为您需要问自己更多问题,例如:

  1. 我正在使用的 Laravel 实例中的数据库对象是否可以访问数据库来保存所述对象?
  2. 我是否需要调用 API 才能更新我的实体/模型?
  3. 如果我在 \DB::update 调用中使用的 Laravel 实例与我的 API 具有相同的凭据?
  4. 如果这是命令或作业,我的代码更改会影响它吗?我是否需要重新启动主管/cron 命令来重新实例化我的代码?
  5. 谁编写了这个 API?使用起来是否足够可靠?它有文档吗?

关于php - AWS MySQL 是否缓存数据?拉拉维尔 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49732924/

相关文章:

api - flutter : unhandled exception: invalid argument

java - mcrypt(在 PHP 中)在 Java 中使用的任何等效项?

php - Laravel Yajra Datatable if addColumn 上的语句

mysql - rake 数据库 :migrate runs in development AWS Beanstalk

c# - 用于对数据进行分组的自动映射器配置

c# - 从 API Controller 调用 POST 方法

php - colname 返回数据库表中的第一个条目,而不是选定的条目

php - 如何通过从另一个下拉列表中选择值来填充下拉列表?

php - PDO 搜索表单损坏的链接

MySQL:使用聚合结果进一步计算