Свойства модели Laravel jenssegers / laravel-mongodb не очищаются при изменении соединения с базой данных и запускают другой запрос - PullRequest
0 голосов
/ 27 июня 2018

Я использую jenssegers / laravel-mongodb с Laravel 5.6, и это здорово, но у меня странная проблема.

У меня есть модель с этой статической функцией:

Class Trigger {
....
public static function onCustomer(User $customer)
{
        config(['database.connections.' . $customer->server . '.database' => $customer->database]);
        return self::on($customer->server);
}
}

Если я сделаю это:

$result = Trigger::onCustomer(User::find('573072804d358b06308b4567'))->get()

вернет коллекцию с 2 объектами - что правильно!

Тогда, если я сделаю это:

$result = Trigger::onCustomer(User::find('598e003a1736736644debbc7'))->get()

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

Если я закрою php artisan tinker и снова введу вторую команду, она вернет пустую коллекцию. Что правильно. Впоследствии, если я выполню первую команду, написанную выше, она вернет пустую коллекцию, даже если в ней 2 объекта.

Даже если я запущу unset ($ result) или $ result = null и снова введу команду, это не даст правильного результата.

Как правильно уничтожить переменную или объект класса Trigger, чтобы при втором запуске это дало правильные результаты?

Я проверял это как в php artisan tinker, так и в браузере. Результат тот же.

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

1 Ответ

0 голосов
/ 29 июня 2018

Чтобы ответить на мой собственный вопрос, проблема в том, что я меняю конфигурацию динамически, но экземпляр соединения все еще существует. Мне придется принудительно установить соединение, чтобы загрузить новый конфиг.

Таким образом, код должен быть таким:

public static function onCustomer(User $customer)
{
    DB::purge($customer->server);

    config(['database.connections.' . $customer->server . '.database' => $customer->database]);

    DB::reconnect($customer->server);

    return self::on($customer->server);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...