在我的处理器类中,我有一个语句从数据库表中获取所有项目并将它们格式化以显示。此方法不起作用并在 getCollection 调用处停止。
class GlobalLinkSettingsProcessor extends modObjectGetListProcessor{
public function initialize() {
return parent::initialize();
}
public function process() {
$result = $this->modx->getCollection('ManagerProjects');
$project_names = array();
foreach ($result as $row) {
$projects = unserialize($row->get('manager_projects'));
foreach($projects as $short_code => $project) {
$project_names[] = array('project_name' => $project, 'project_short_code' => $short_code);
}
}
return '{"total":' . count($project_names) . ',"results":' . $this->modx->toJSON($project_names) . ',"success":true}';
}
...
}
这段使用纯 SQL 的代码确实有效:
class GlobalLinkSettingsProcessor extends modObjectGetListProcessor{
public function initialize() {
return parent::initialize();
}
public function process() {
$leadersql = "SELECT * FROM `modx_manager_projects`";
$query = $this->modx->query($leadersql);
$project_names = array();
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$projects = unserialize($row['manager_projects']);
foreach($projects as $short_code => $project) {
$project_names[] = array('project_name' => $project, 'project_short_code' => $short_code);
}
};
return '{"total":' . count($project_names) . ',"results":' . $this->modx->toJSON($project_names) . ',"success":true}';
}
...
}
我使用与第一种方法类似的方法,它可以保存ManagerProjects
并正常工作,所以我认为它与模型声明无关。我可以轻松地使用上面的第二种方法,因为它似乎有效,但我想使用最好的方法。
第一种方法有什么问题?
第一种方法是在 Modx 处理器中实现 SQL 的正确方法吗?或者,还有更好的方法?