From 36ead68fecdc69fe0c15b723aa1b26dc01c4ed7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E6=99=AF=E7=AB=8B?= Date: Sun, 16 Feb 2025 10:29:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=5Fquery=20=E6=94=AF=E6=8C=81=E5=AD=90?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/think-library/src/Helper.php | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/plugin/think-library/src/Helper.php b/plugin/think-library/src/Helper.php index f8da3d4ea..035902505 100644 --- a/plugin/think-library/src/Helper.php +++ b/plugin/think-library/src/Helper.php @@ -90,15 +90,22 @@ abstract class Helper public static function buildQuery($query) { if (is_string($query)) { - return static::buildModel($query)->db(); + if (self::isSubquery($query)) { + $query = Library::$sapp->db->table($query); + } else { + return static::buildModel($query)->db(); + } } if ($query instanceof Model) return $query->db(); if ($query instanceof BaseQuery && !$query->getModel()) { - $name = $query->getConfig('name') ?: ''; - if (is_string($name) && strlen($name) > 0) { - $name = config("database.connections.{$name}") ? $name : ''; + // 如果是子查询,不需要挂载模型对象 + if (!self::isSubquery($query->getTable())) { + $name = $query->getConfig('name') ?: ''; + if (is_string($name) && strlen($name) > 0) { + $name = config("database.connections.{$name}") ? $name : ''; + } + $query->model(static::buildModel($query->getName(), [], $name)); } - $query->model(static::buildModel($query->getName(), [], $name)); } return $query; } @@ -121,4 +128,14 @@ abstract class Helper } return VirtualModel::mk($name, $data, $conn); } + + /** + * 判断是否为子查询 + * @param string $sql + * @return bool + */ + private static function isSubquery(string $sql): bool + { + return preg_match('/^\(?\s*select\s+/i', $sql) > 0; + } } \ No newline at end of file