我正在尝试为MariaDB实现对系统版本表的支持。 当前,我们使用原始表达式来查询历史数据,但我们想使用查询生成器。
查询历史数据的解决方案是在表名称后添加FOR SYSTEM_TIME。到目前为止,我已经通过使用如下特征来覆盖查询构建器来实现:
trait TemporalTrait
{
protected function newBaseQueryBuilder()
{
$connection = $this->getConnection();
return new \App\Override\TemporalQueryBuilder(
$connection, $connection->getQueryGrammar(),
$connection->getPostProcessor()
);
}
}
以及时间查询构建器类:
namespace App\Override;
class TemporalQueryBuilder extends \Illuminate\Database\Query\Builder
{
public function forSystemTime($time)
{
return $this->fromRaw($this->from . ' FOR SYSTEM_TIME AS OF TIMESTAMP ? ', $time);
}
}
其中forSystemTime函数将附加表达式添加到该语句。这很不好,因为表名现在包含FOR SYSTEM_TIME AS OF TIMESTAMP
,并且如果您尝试
选择查询将导致以下错误的列:语法错误select tablename FOR SYSTEM_TIME AS OF TIMESTAMP.column from tablename
。也许与wrapTable有关的问题已经讨论过here?任何想法如何克服这个?谢谢您的帮助。