Я делаю простую конечную точку 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.
Немного запутался с вашим кодом. От отладки я предлагаю проверить ваш API для этой проблемы. Из того, что я вижу, вы делаете это:
Поэтому мне остается спросить, если проблема связана с 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';
,
Это моя мысль. Однако в вашем ближайшем случае я думаю, вам нужно задать себе еще несколько вопросов, таких как:
\DB::update
имеет те же учетные данные, что и мой API?