fix: _query 支持子查询操作

This commit is contained in:
邹景立 2025-02-16 10:29:54 +08:00
parent 659412d17c
commit 36ead68fec

View File

@ -90,15 +90,22 @@ abstract class Helper
public static function buildQuery($query) public static function buildQuery($query)
{ {
if (is_string($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 Model) return $query->db();
if ($query instanceof BaseQuery && !$query->getModel()) { if ($query instanceof BaseQuery && !$query->getModel()) {
$name = $query->getConfig('name') ?: ''; // 如果是子查询,不需要挂载模型对象
if (is_string($name) && strlen($name) > 0) { if (!self::isSubquery($query->getTable())) {
$name = config("database.connections.{$name}") ? $name : ''; $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; return $query;
} }
@ -121,4 +128,14 @@ abstract class Helper
} }
return VirtualModel::mk($name, $data, $conn); 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;
}
} }