@@ -90,15 +90,22 @@ public static function instance(...$args): Helper
90
90
public static function buildQuery ($ query )
91
91
{
92
92
if (is_string ($ query )) {
93
- return static ::buildModel ($ query )->db ();
93
+ if (self ::isSubquery ($ query )) {
94
+ $ query = Library::$ sapp ->db ->table ($ query );
95
+ } else {
96
+ return static ::buildModel ($ query )->db ();
97
+ }
94
98
}
95
99
if ($ query instanceof Model) return $ query ->db ();
96
100
if ($ query instanceof BaseQuery && !$ query ->getModel ()) {
97
- $ name = $ query ->getConfig ('name ' ) ?: '' ;
98
- if (is_string ($ name ) && strlen ($ name ) > 0 ) {
99
- $ name = config ("database.connections. {$ name }" ) ? $ name : '' ;
101
+ // 如果是子查询,不需要挂载模型对象
102
+ if (!self ::isSubquery ($ query ->getTable ())) {
103
+ $ name = $ query ->getConfig ('name ' ) ?: '' ;
104
+ if (is_string ($ name ) && strlen ($ name ) > 0 ) {
105
+ $ name = config ("database.connections. {$ name }" ) ? $ name : '' ;
106
+ }
107
+ $ query ->model (static ::buildModel ($ query ->getName (), [], $ name ));
100
108
}
101
- $ query ->model (static ::buildModel ($ query ->getName (), [], $ name ));
102
109
}
103
110
return $ query ;
104
111
}
@@ -121,4 +128,14 @@ public static function buildModel(string $name, array $data = [], string $conn =
121
128
}
122
129
return VirtualModel::mk ($ name , $ data , $ conn );
123
130
}
131
+
132
+ /**
133
+ * 判断是否为子查询
134
+ * @param string $sql
135
+ * @return bool
136
+ */
137
+ private static function isSubquery (string $ sql ): bool
138
+ {
139
+ return preg_match ('/^\(?\s*select\s+/i ' , $ sql ) > 0 ;
140
+ }
124
141
}
0 commit comments