【发布时间】:2017-12-10 15:43:43
【问题描述】:
我目前正在用php-activerecord 替换自制的hack-y MVC 方法的模型组件。我有一个单独的页面,在数据库服务器出现故障时显示,该页面用于显示带有访客头像、姓名和角色的用户徽章。代码如下:
if (Auth::$signed_in)
echo Auth::$user->getAvatarWrap();
else echo (new \App\Models\User([
'name' => 'Guest',
'role' => 'guest',
'avatar_url' => GUEST_AVATAR
]))->getAvatarWrap();
Auth::$signed_in 在用户登录时设置为true,这在数据库中断的情况下是不可能的,因此else 分支使用预定义的数据执行。
Pre-ActiveRecord 这将简单地将属性添加到对象,并且对getAvatarWrap 方法的调用将毫无问题地执行。现在,随着模型由 ActiveRecord 控制,无论出于何种原因,都会发生一组额外的调用。这可能是因为模型定义了关系,但我不确定。
ActiveRecord\DatabaseException: PDOException: SQLSTATE[08006] [7] could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432? in /var/www/vendor/php-activerecord/php-activerecord/lib/Connection.php:260
Stack trace:
#0 /var/www/vendor/php-activerecord/php-activerecord/lib/Connection.php(260): PDO->__construct('pgsql:host=loca...', '<username>', '<password>', Array)
#1 /var/www/vendor/php-activerecord/php-activerecord/lib/Connection.php(122): ActiveRecord\Connection->__construct(Object(stdClass))
#2 /var/www/vendor/php-activerecord/php-activerecord/lib/ConnectionManager.php(33): ActiveRecord\Connection::instance('pgsql://databas...')
#3 /var/www/vendor/php-activerecord/php-activerecord/lib/Table.php(114): ActiveRecord\ConnectionManager::get_connection('pgsql')
#4 /var/www/vendor/php-activerecord/php-activerecord/lib/Table.php(90): ActiveRecord\Table->reestablish_connection(false)
#5 /var/www/vendor/php-activerecord/php-activerecord/lib/Table.php(71): ActiveRecord\Table->__construct('App\\Models\\User')
#6 /var/www/vendor/php-activerecord/php-activerecord/lib/Model.php(765): ActiveRecord\Table::load('App\\Models\\User')
#7 /var/www/vendor/php-activerecord/php-activerecord/lib/Model.php(271): ActiveRecord\Model::table()
#8 /var/www/includes/views/_sidebar.php(20): ActiveRecord\Model->__construct(Array)
#9 /var/www/includes/views/_layout.php(148): include('/var/www...')
#10 /var/www/includes/views/fatalerr.php(46): require('/var/www...')
#11 /var/www/includes/init.php(32): require('/var/www...')
#12 /var/www/includes/do.php(3): require('/var/www...')
#13 /var/www/public/index.php(1): require('/var/www...')
#14 {main} in /var/www/vendor/php-activerecord/php-activerecord/lib/Connection.php on line 262
当我知道 ActiveRecord 找不到连接并且它应该对我提供的数据感到满意时,如何告诉 ActiveRecord 停止寻找连接?在停电期间,我是否必须告别使用我的任何模型?
【问题讨论】:
-
能否修改配置以使用 sqlite:memory 连接?
-
我可以完全控制代码和运行它的服务器。
-
那么这可能是一个解决方案。每个查询都会失败,但无论如何都会发生。
标签: php oop model-view-controller model phpactiverecord