Laravel jenssegers/laravel-mongodb 更改数据库连接和 运行 另一个查询时未清除模型属性
Laravel jenssegers/laravel-mongodb model properties are not cleared on changing database connection and run another query
我正在使用 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()
它将 return 一个包含 2 个对象的集合 - 这是正确的!
那么如果我这样做:
$result = Trigger::onCustomer(User::find('598e003a1736736644debbc7'))->get()
它将return与上面相同的集合,但是用户598e003a1736736644debbc7在数据库中没有任何记录。
如果我再次关闭 php artisan tinker 和 运行 第二个命令,它将 return 清空集合。哪个是正确的。之后,如果我 运行 上面写的第一个命令,它将 return 清空集合,即使其中有 2 个对象。
即使我 运行 unset($result) or $result = null 和 运行 再次命令它也不会带来正确的结果。
我怎样才能正确销毁变量或触发器 class 对象,以便在一秒钟内 运行 它会带来正确的结果?
我已经在 php artisan tinker 和浏览器中对此进行了测试。结果是一样的。
很明显,如果我 运行 在单独的 php 实例中执行上述命令,它将正常工作。它必须与模型缓存或类似的东西有关。
回答我自己的问题,问题是我动态更改配置,但连接实例仍然存在。我将不得不强制连接重新连接以加载新配置。
所以代码必须是这样的:
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);
}
我正在使用 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()
它将 return 一个包含 2 个对象的集合 - 这是正确的!
那么如果我这样做:
$result = Trigger::onCustomer(User::find('598e003a1736736644debbc7'))->get()
它将return与上面相同的集合,但是用户598e003a1736736644debbc7在数据库中没有任何记录。
如果我再次关闭 php artisan tinker 和 运行 第二个命令,它将 return 清空集合。哪个是正确的。之后,如果我 运行 上面写的第一个命令,它将 return 清空集合,即使其中有 2 个对象。
即使我 运行 unset($result) or $result = null 和 运行 再次命令它也不会带来正确的结果。
我怎样才能正确销毁变量或触发器 class 对象,以便在一秒钟内 运行 它会带来正确的结果?
我已经在 php artisan tinker 和浏览器中对此进行了测试。结果是一样的。
很明显,如果我 运行 在单独的 php 实例中执行上述命令,它将正常工作。它必须与模型缓存或类似的东西有关。
回答我自己的问题,问题是我动态更改配置,但连接实例仍然存在。我将不得不强制连接重新连接以加载新配置。
所以代码必须是这样的:
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);
}