From f34f5a745ffc82d824413db8acd32e5f70a3ee0d Mon Sep 17 00:00:00 2001 From: songchenxuan Date: Tue, 6 Feb 2024 16:26:43 +0800 Subject: [PATCH] * Modify getSysOptions object type. --- module/chart/model.php | 23 +++++++++++++++-------- module/pivot/model.php | 23 +++++++++++++++-------- module/screen/model.php | 23 +++++++++++++++-------- 3 files changed, 45 insertions(+), 24 deletions(-) diff --git a/module/chart/model.php b/module/chart/model.php index 427b633a78..07a32a4401 100644 --- a/module/chart/model.php +++ b/module/chart/model.php @@ -711,22 +711,29 @@ class chartModel extends model case 'object': if($field) { + $useField = $field; + $useTable = $object; + $path = $this->app->getModuleRoot() . 'dataview' . DS . 'table' . DS . "$object.php"; if(is_file($path)) { include $path; $fieldObject = $schema->fields[$field]['object']; - $table = zget($this->config->objectTables, $fieldObject, ''); - $showField = 'id'; - $show = explode('.', $schema->fields[$field]['show']); - if(count($show) == 2) $showField = $show[1]; + $fieldShow = explode('.', $schema->fields[$field]['show']); - if($table) $options = $this->dao->select("id, {$showField}")->from($table)->fetchPairs(); + if($fieldObject) $useTable = $fieldObject; + if(count($fieldShow) == 2) $useField = $show[1]; } - else + + $table = isset($this->config->objectTables[$useTable]) ? $this->config->objectTables[$useTable] : zget($this->config->objectTables, $object, ''); + if($table) { - $table = zget($this->config->objectTables, $object, ''); - if($table) $options = $this->dao->select("id, {$field}")->from($table)->fetchPairs(); + $columns = $this->dbh->query("SHOW COLUMNS FROM $table")->fetchAll(); + foreach($columns as $id => $column) $columns[$id] = (array)$column; + $fieldList = array_column($columns, 'Field'); + + $useField = in_array($useField, $fieldList) ? $useField : 'id'; + $options = $this->dao->select("id, {$useField}")->from($table)->fetchPairs(); } } break; diff --git a/module/pivot/model.php b/module/pivot/model.php index 8796537f01..2db456ba4b 100644 --- a/module/pivot/model.php +++ b/module/pivot/model.php @@ -2531,22 +2531,29 @@ class pivotModel extends model } else { + $useField = $field; + $useTable = $object; + $path = $this->app->getModuleRoot() . 'dataview' . DS . 'table' . DS . "$object.php"; if(is_file($path)) { include $path; $fieldObject = $schema->fields[$field]['object']; - $table = zget($this->config->objectTables, $fieldObject, ''); - $showField = 'id'; - $show = explode('.', $schema->fields[$field]['show']); - if(count($show) == 2) $showField = $show[1]; + $fieldShow = explode('.', $schema->fields[$field]['show']); - if($table) $options = $this->dao->select("id, {$showField}")->from($table)->fetchPairs(); + if($fieldObject) $useTable = $fieldObject; + if(count($fieldShow) == 2) $useField = $show[1]; } - else + + $table = isset($this->config->objectTables[$useTable]) ? $this->config->objectTables[$useTable] : zget($this->config->objectTables, $object, ''); + if($table) { - $table = zget($this->config->objectTables, $object, ''); - if($table) $options = $this->dao->select("id, {$field}")->from($table)->fetchPairs(); + $columns = $this->dbh->query("SHOW COLUMNS FROM $table")->fetchAll(); + foreach($columns as $id => $column) $columns[$id] = (array)$column; + $fieldList = array_column($columns, 'Field'); + + $useField = in_array($useField, $fieldList) ? $useField : 'id'; + $options = $this->dao->select("id, {$useField}")->from($table)->fetchPairs(); } } } diff --git a/module/screen/model.php b/module/screen/model.php index dd14cb180e..3279fa28c6 100644 --- a/module/screen/model.php +++ b/module/screen/model.php @@ -1156,22 +1156,29 @@ class screenModel extends model case 'object': if($field) { + $useField = $field; + $useTable = $object; + $path = $this->app->getModuleRoot() . 'dataview' . DS . 'table' . DS . "$object.php"; if(is_file($path)) { include $path; $fieldObject = $schema->fields[$field]['object']; - $table = zget($this->config->objectTables, $fieldObject, ''); - $showField = 'id'; - $show = explode('.', $schema->fields[$field]['show']); - if(count($show) == 2) $showField = $show[1]; + $fieldShow = explode('.', $schema->fields[$field]['show']); - if($table) $options = $this->dao->select("id, {$showField}")->from($table)->fetchPairs(); + if($fieldObject) $useTable = $fieldObject; + if(count($fieldShow) == 2) $useField = $show[1]; } - else + + $table = isset($this->config->objectTables[$useTable]) ? $this->config->objectTables[$useTable] : zget($this->config->objectTables, $object, ''); + if($table) { - $table = zget($this->config->objectTables, $object, ''); - if($table) $options = $this->dao->select("id, {$field}")->from($table)->fetchPairs(); + $columns = $this->dbh->query("SHOW COLUMNS FROM $table")->fetchAll(); + foreach($columns as $id => $column) $columns[$id] = (array)$column; + $fieldList = array_column($columns, 'Field'); + + $useField = in_array($useField, $fieldList) ? $useField : 'id'; + $options = $this->dao->select("id, {$useField}")->from($table)->fetchPairs(); } } break;