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

Я использую 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()

он вернет коллекцию с двумя объектами - это правильно!

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

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

он вернет тот же набор, что и выше, но пользователь 598e003a1736736644debbc7 не имеет записей в базе данных.

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

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

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

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

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

mongodb,laravel,

0

Ответов: 1


0 принят

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

Таким образом, код должен выглядеть следующим образом:

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);
}
MongoDB, Laravel,
Похожие вопросы