向Laravel查询生成器添加对系统版本表的支持

时间:2019-11-15 13:01:01

标签: laravel eloquent mariadb

我正在尝试为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?任何想法如何克服这个?谢谢您的帮助。

0 个答案:

没有答案