Является ли AWS MySQL кэшированием данных? Ларавел 5

0

Я делаю простую конечную точку API, которая возвращает код доступа для события.

Если в событии нет кода доступа, ему присваивается одно и сохраняется в базе данных. Затем он проверяет, является ли он в настоящее время общедоступным или закрытым. Если частный, обратный код доступа, если public, возвращает пустую строку.

Это контроллер конечной точки:

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 still null.
    }

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

Моя проблема в том, что, хотя все работает так, как ожидалось. Когда access_code создается, он возвращается из api.

Однако, когда я проверяю запись в MySQL Workbench (которая подключается к экземпляру AWS), она по-прежнему не указана! хотя я вытащил его из базы данных как ненулевое значение, используя конечную точку API.

Теги:
amazon-web-services
laravel-5

1 ответ

1

Немного запутался с вашим кодом. От отладки я предлагаю проверить ваш API для этой проблемы. Из того, что я вижу, вы делаете это:

  1. Запросить API для события с идентификатором 1
  2. Проверьте, имеет ли событие параметр
  3. Если параметр отсутствует, обновление с использованием локальной базы данных

Поэтому мне остается спросить, если проблема связана с 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(); $party = new Party; $party->save(); creating событие подберет сохранение и также назначит access_code, если вы не установили его вручную, как $party->access_code = 'you can\'t come'; ,

Это моя мысль. Однако в вашем ближайшем случае я думаю, вам нужно задать себе еще несколько вопросов, таких как:

  1. Является ли объект БД из экземпляра Laravel, который я использую, имеет доступ к базе данных для сохранения указанного объекта?
  2. Нужно ли мне обращаться к API для обновления моего объекта/модели?
  3. Если экземпляр Laravel, который я использую из вызова \DB::update имеет те же учетные данные, что и мой API?
  4. Если это команда или задание, влияют ли на меня изменения моего кода? Нужно ли перезапускать команду supervisor/cron для повторного экземпляра моего кода?
  5. Кто написал этот API? Достаточно ли он достаточно надежный? И есть ли у него документация?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню