mirror of
https://gitee.com/fastadminnet/framework.git
synced 2026-07-01 20:52:48 +08:00
@@ -1477,17 +1477,15 @@ class Model
|
||||
$prefix = $this->tablePrefix;
|
||||
// 传入的表名为数组
|
||||
if (is_array($join)) {
|
||||
if (0 !== key($join)) {
|
||||
// 键名为表名,键值作为表的别名
|
||||
$table = key($join) . ' ' . current($join);
|
||||
if (0 !== $key = key($join)) {
|
||||
// 设置了键名则键名为表名,键值作为表的别名
|
||||
$table = $key . ' ' . array_shift($join);
|
||||
} else {
|
||||
$table = current($join);
|
||||
$table = array_shift($join);
|
||||
}
|
||||
if (isset($join[1])) {
|
||||
// 第二个元素为字符串则把第二元素作为表前缀
|
||||
if (is_string($join[1])) {
|
||||
$table = $join[1] . $table;
|
||||
}
|
||||
if (count($join)) {
|
||||
// 有设置第二个元素则把第二元素作为表前缀
|
||||
$table = (string) current($join) . $table;
|
||||
} else {
|
||||
// 加上默认的表前缀
|
||||
$table = $prefix . $table;
|
||||
|
||||
@@ -37,6 +37,8 @@ trait View
|
||||
if (isset($view['_table'])) {
|
||||
// 2011/10/17 添加实际表名定义支持 可以实现同一个表的视图
|
||||
$tableName .= $view['_table'];
|
||||
$prefix = $this->tablePrefix;
|
||||
$tableName = preg_replace_callback("/__([A-Z_-]+)__/sU", function ($match) use ($prefix) {return $prefix . strtolower($match[1]);}, $tableName);
|
||||
} else {
|
||||
$tableName .= \think\Loader::table($name)->getTableName();
|
||||
}
|
||||
@@ -73,14 +75,14 @@ trait View
|
||||
$val = $this->_checkFields($name, $val);
|
||||
foreach ($val as $key => $field) {
|
||||
if (is_numeric($key)) {
|
||||
$viewFields[$k . '.' . $field] = $field;
|
||||
$viewFields[$field] = $k . '.' . $field;
|
||||
} elseif ('_' != substr($key, 0, 1)) {
|
||||
// 以_开头的为特殊定义
|
||||
if (false !== strpos($key, '*') || false !== strpos($key, '(') || false !== strpos($key, '.')) {
|
||||
//如果包含* 或者 使用了sql方法 则不再添加前面的表名
|
||||
$viewFields[$key] = $field;
|
||||
$viewFields[$field] = $key;
|
||||
} else {
|
||||
$viewFields[$k . '.' . $key] = $field;
|
||||
$viewFields[$field] = $k . '.' . $key;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -130,15 +132,63 @@ trait View
|
||||
if (is_array($where)) {
|
||||
$_where = [];
|
||||
foreach ($where as $field => $value) {
|
||||
if (false !== $k = array_search($field, $viewFields, true)) {
|
||||
// 存在视图字段
|
||||
$_where[$k] = $value;
|
||||
if ('_complex' != $field) {
|
||||
$value = [$field => $value];
|
||||
$parent = 1;
|
||||
} else {
|
||||
$_where[$field] = $value;
|
||||
$parent = 0;
|
||||
}
|
||||
foreach ($value as $key => $val) {
|
||||
if (0 !== strpos($key, '_')) {
|
||||
if ($items = preg_split('/[\|\&]/', $key, -1, PREG_SPLIT_OFFSET_CAPTURE)) {
|
||||
// 倒序找出的字段数组,以便从后向前替换
|
||||
$items = array_reverse($items);
|
||||
foreach ($items as $item) {
|
||||
if (isset($viewFields[$item[0]])) { // 存在视图字段
|
||||
$key = substr_replace($key, $viewFields[$item[0]], $item[1], strlen($item[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isset($val[0]) && 'exp' == $val[0] && !empty($val[1])) {
|
||||
if (preg_match_all('/(?<![\'\.])\b(\w+)\b(?![\'])/', $val[1], $matches, PREG_OFFSET_CAPTURE)) {
|
||||
// 倒序找出的字段数组,以便从后向前替换
|
||||
$items = array_reverse($matches[0]);
|
||||
foreach ($items as $item) {
|
||||
if (isset($viewFields[$item[0]])) {
|
||||
$val[1] = substr_replace($val[1], $viewFields[$item[0]], $item[1], strlen($item[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif (is_string($val) && ('__query' == $key || '_string' == $key)) {
|
||||
if (preg_match_all('/(?<![=\'\.])\b(\w+)\b(?![&\'])/', $val, $matches, PREG_OFFSET_CAPTURE)) {
|
||||
// 倒序找出的字段数组,以便从后向前替换
|
||||
$items = array_reverse($matches[0]);
|
||||
foreach ($items as $item) {
|
||||
if (isset($viewFields[$item[0]])) {
|
||||
$val = substr_replace($val, $viewFields[$item[0]], $item[1], strlen($item[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($parent) {
|
||||
$_where[$key] = $val;
|
||||
} else {
|
||||
$_where[$field][$key] = $val;
|
||||
}
|
||||
}
|
||||
}
|
||||
return $_where;
|
||||
} else {
|
||||
if (preg_match_all('/(?<![=\'\.])\b(\w+)\b(?![&\'])/', $where, $matches, PREG_OFFSET_CAPTURE)) {
|
||||
// 倒序找出的字段数组,以便从后向前替换
|
||||
$items = array_reverse($matches[0]);
|
||||
foreach ($items as $item) {
|
||||
if (isset($viewFields[$item[0]])) {
|
||||
$where = substr_replace($where, $viewFields[$item[0]], $item[1], strlen($item[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
return $where;
|
||||
}
|
||||
}
|
||||
@@ -170,9 +220,9 @@ trait View
|
||||
$sort = ' ' . $field;
|
||||
$field = $key;
|
||||
}
|
||||
if (false !== $k = array_search($field, $viewFields, true)) {
|
||||
if (isset($viewFields[$field])) {
|
||||
// 存在视图字段
|
||||
$field = $k . $sort;
|
||||
$field = $viewFields[$field] . $sort;
|
||||
}
|
||||
$_order[] = $field;
|
||||
}
|
||||
@@ -195,9 +245,9 @@ trait View
|
||||
$group = explode(',', $group);
|
||||
}
|
||||
foreach ($group as &$field) {
|
||||
if (false !== $k = array_search($field, $viewFields, true)) {
|
||||
if (isset($viewFields[$field])) {
|
||||
// 存在视图字段
|
||||
$field = $k;
|
||||
$field = $viewFields[$field];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -238,14 +288,14 @@ trait View
|
||||
// 倒序找出的字段数组,以便从后向前替换
|
||||
$items = array_reverse($matches[0]);
|
||||
foreach ($items as $item) {
|
||||
if (false !== $k = array_search($item[0], $viewFields, true)) {
|
||||
$field = substr_replace($field, $k, $item[1], strlen($item[0]));
|
||||
if (isset($viewFields[$item[0]])) {
|
||||
$field = substr_replace($field, $viewFields[$item[0]], $item[1], strlen($item[0]));
|
||||
}
|
||||
}
|
||||
}
|
||||
} elseif (false !== $k = array_search($field, $viewFields, true)) {
|
||||
} elseif (isset($viewFields[$field])) {
|
||||
// 存在视图字段
|
||||
$field = $k;
|
||||
$field = $viewFields[$field];
|
||||
}
|
||||
$_fields[] = $field . $alias;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user