Php modx xpdo刷新数据需要很长时间

Php modx xpdo刷新数据需要很长时间,php,mysql,modx,xpdo,Php,Mysql,Modx,Xpdo,我在MODX Revolution 2.7.3中使用xpdo在与MODX安装相同的数据库中插入自定义表中的数据和额外数据。一切正常,只是表中的更改需要大约20分钟才能显示在xpod查询中 例如,我有一个成人字段的联系人表。表单I中有一个下拉框,其中的选项是成人联系人。它工作正常,但当您更改联系人的成人状态时,下拉列表中的选项需要20分钟来反映更改 请参阅下面的代码 $class='Contacts'; $fields = array_keys($modx->getFields($clas

我在MODX Revolution 2.7.3中使用xpdo在与MODX安装相同的数据库中插入自定义表中的数据和额外数据。一切正常,只是表中的更改需要大约20分钟才能显示在xpod查询中

例如,我有一个成人字段的联系人表。表单I中有一个下拉框,其中的选项是成人联系人。它工作正常,但当您更改联系人的成人状态时,下拉列表中的选项需要20分钟来反映更改

请参阅下面的代码

$class='Contacts';

$fields = array_keys($modx->getFields($class));

$collections = $modx->getCollection($class);

foreach($collections as $collection) {

    if($collection->get($fields[4])=='YES'){
    $output .= '<option value=' . $collection->get($fields[0]).'>'.$collection->get($fields[1])." ".$collection->get($fields[2]).'</option>';
    }

}


return $output;

There is only one table involved and the code for creating the table is:

    CREATE TABLE `cbdb_contacts` (
  `contactID` int(11) NOT NULL,
  `firstname` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
  `lastname` varchar(25) COLLATE utf8_unicode_ci NOT NULL,
  `dob` date NOT NULL,
  `adult` enum('YES','NO') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'NO',
  `mobile` text COLLATE utf8_unicode_ci NOT NULL,
  `landline` text COLLATE utf8_unicode_ci NOT NULL,
  `address` text COLLATE utf8_unicode_ci NOT NULL,
  `email` text COLLATE utf8_unicode_ci NOT NULL,
  `comments` longtext COLLATE utf8_unicode_ci NOT NULL,
  `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

    -- Dumping data for table `cbdb_contacts`
--

INSERT INTO `cbdb_contacts` (`contactID`, `firstname`, `lastname`, `dob`, `adult`, `mobile`, `landline`, `address`, `email`, `comments`, `timestamp`) VALUES
(38, 'Tex', 'Brown', '2020-06-01', 'NO', '', '', '', '', '', '2020-07-12 18:34:19'),
(39, 'Mary', 'Brown', '2020-06-01', 'YES', '', '', '', '', '', '2020-07-06 19:03:23'),
(40, 'Pamela', 'Brown', '2020-06-01', 'YES', '', '', '', '', '', '2020-07-08 08:13:11'),
(41, 'Eddy', 'Green', '2020-06-01', 'NO', '', '', '', '', '', '2020-07-06 19:04:19'),
(42, 'Sheila', 'White', '2020-06-01', 'NO', '', '', '', '', '', '2020-07-12 18:54:03'),
(43, 'Dan', 'Black', '2020-06-01', 'NO', '', '', '', '', '', '2020-07-08 08:20:25'),
(134, 'Annete', 'Pray', '0000-00-00', 'NO', '', '', '', '', '', '2020-07-12 19:23:02'),
(133, 'Alex', 'Grey', '0000-00-00', 'NO', '', '', '', '', '', '2020-07-12 19:10:14'),
(132, 'Princess', 'Brown', '0000-00-00', 'NO', '', '', '', '', '', '2020-07-11 22:43:55'),
(131, 'Prince', 'Black', '0000-00-00', 'NO', '', '', '', '', '', '2020-07-11 22:39:22'),
(129, 'Tom', 'Smith', '0000-00-00', 'YES', '', '', '', '', '', '2020-07-11 22:34:32'),
(128, 'James', 'Dean', '0000-00-00', 'YES', '', '', '', '', '', '2020-07-11 22:14:19'),
(127, 'Peter', 'Paul', '0000-00-00', 'NO', '', '', '', '', '', '2020-07-11 22:08:52'),
(130, 'Tess', 'Logan', '0000-00-00', 'NO', '', '', '', '', '', '2020-07-11 22:38:35');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `cbdb_contacts`
--
ALTER TABLE `cbdb_contacts`
  ADD PRIMARY KEY (`contactID`),
  ADD KEY `firstname` (`firstname`) USING BTREE;

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `cbdb_contacts`
--
ALTER TABLE `cbdb_contacts`
  MODIFY `contactID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=135;
COMMIT;
$class='Contacts';
$fields=array_key($modx->getFields($class));
$collections=$modx->getCollection($class);
foreach($collections作为$collection){
如果($collection->get($fields[4])=='YES'){
$output.=''.$collection->get($fields[1])。''.$collection->get($fields[2]);
}
}
返回$output;
仅涉及一个表,创建该表的代码为:
创建表“cbdb_联系人”(
`contactID`int(11)不为空,
`firstname`varchar(15)校对utf8\u unicode\u ci非空,
`lastname`varchar(25)COLLATE utf8\u unicode\u ci非空,
`dob`日期不为空,
`成人'enum('YES','NO')校对utf8\u unicode\u ci非空默认值'NO',
`mobile`text-COLLATE utf8\u unicode\u ci不为空,
`固定线路`文本对比utf8\U unicode\U ci不为空,
`地址`文本校对utf8\U unicode\U ci不为空,
`电子邮件`text COLLATE utf8\u unicode\u ci不为空,
`注释'longtext COLLATE utf8\u unicode\u ci非空,
`timestamp` timestamp NOT NULL更新当前\u时间戳时的默认当前\u时间戳
)ENGINE=MyISAM默认字符集=utf8 COLLATE=utf8\U unicode\U ci;
--正在转储“cbdb_联系人”表的数据`
--
在“cbdb_联系人”中插入(`contactID`、`firstname`、`lastname`、`dob`、`成人`、`mobile`、`landline`、`address`、`email`、`comments`、`timestamp`)值
(38,'Tex','Brown','2020-06-01','NO','2020-07-12 18:34:19'),
(39,“玛丽”,“布朗”,“2020-06-01”,“是”,“2020-07-06 19:03:23”),
(40,“帕梅拉”,“布朗”,“2020-06-01”,“是”,“是”,“2020-07-08 08:13:11”),
(41,“涡流”,“绿色”,“2020-06-01”,“否”,“2020-07-06 19:04:19”),
(42,“希拉”,“怀特”,“2020-06-01”,“不”,“2020-07-12 18:54:03”),
(43,“丹”,“黑”,“2020-06-01”,“不”,“2020-07-08 08:20:25”),
(134,“安妮特”,“祈祷”,“0000-00-00”,“不”,“2020-07-12 19:23:02”),
(133,“亚历克斯”、“格雷”、“0000-00-00”、“不”、“2020-07-12 19:10:14”),
(132,“公主”,“布朗”,“0000-00-00”,“不”,“不”,“2020-07-11 22:43:55”),
(131,“王子”,“黑人”,“0000-00-00”,“不”,“不”,“2020-07-11 22:39:22”),
(129,“汤姆”、“史密斯”、“0000-00-00”、“是”、“2020-07-11 22:34:32”),
(128,“詹姆斯”,“迪恩”,“0000-00-00”,“是”,“2020-07-11 22:14:19”),
(127,“彼得”、“保罗”、“0000-00-00”、“不”、“2020-07-11 22:08:52”),
(130,“苔丝”、“洛根”、“0000-00-00”、“不”、“2020-07-11 22:38:35”);
--
--转储表的索引
--
--
--表'cbdb_联系人的索引`
--
更改表'cbdb_触点`
添加主键(`contactID`),
使用BTREE添加键'firstname'('firstname`);
--
--转储表的自动增量
--
--
--表“cbdb”触点的自动增量`
--
更改表'cbdb_触点`
修改'contactID`int(11)非空自动递增,自动递增=135;
犯罪

使用时,默认情况下似乎启用了缓存,请尝试将
false
作为第三个参数传递

$collections=$modx->getCollection($class,null,false);
您可能还必须传递一个空数组作为第二个参数,这个参数有点冲突

$collections=$modx->getCollection($class,[],false);
编辑


显然,代码片段结果也会被缓存,甚至不会命中数据库,除非使用非缓存语法调用它们,
[[!tag]]
。使用
指令应该绕过这个特定代码段的缓存,这是可以的,因为这是最小数据库查询。

嗨,克里斯,感谢您的响应。但很抱歉,这两种选择似乎都不起作用。我有一张与“成人”的联系表,作为字段之一。通过contact ans check集合,我的问题循环中的代码是成人字段(字段[4]),是。如果是这样,名称和姓氏将添加到选项列表中,该列表用于网页上的select元素。我希望如果我在phpmyAdmin中将联系人的成人状态从是更改为否,然后刷新页面,选项列表将相应更改。但这并没有发生如果这是一个有14行的表,我不能设置“缓存”和“不”可能是问题所在。我认为需要一个代码来刷新modx对象。只是不知道它是什么。克里斯,我已经将缓存默认值cacje_默认值设置为否。更改其中一个联系人的成人状态。然后试着在chrome、firefox、firefox私有模式、Edge中查看该站点,但仍然观察到同样的问题哦,你在一个片段中。如果这就是代码段中的全部内容,我看不出有什么理由不能使用
[[!tag]]]
将其作为未缓存的始终调用。否则,您是否总是要控制数据如何放入数据库?如果是这样,您应该能够在更新/插入/删除等操作时使缓存无效/清除缓存。如果您在系统外进行修改,我建议您创建一个自定义页面,由隐藏的特殊URL调用,以便根据需要清除缓存。缓存很好,但仅与无效逻辑一样好。请提供生成的SQL语句,以及所涉及的表的
SHOW CREATE TABLE
。@Rick James我已编辑了问题并添加了创建表。生成的sql是:-
Select*FROM cbdb\u contacts
表中有多少行?让我们看看桌子。表的大小是多少(
显示表状态
将提供千兆字节)