如何让Laravel使用我的班级而不是原生的PDO?

问题描述 投票:2回答:1

我在这里面临一个大问题。我使用laravel 5.1和Sql Server 2012工作。问题是:我的数据库的所有表都有一个触发器,负责记录该表上的活动。此触发器在主表上插入后执行插入。这样,每次插入新Person时,触发器都会插入一个新的PersonLog。

这样,在我做的时候在Laravel上:

$person = Person::create(['personName' => 'Anderson']);
echo $person->id; //it tries to show me the log id instead of person id.

这是因为PDO使用@@identity变量来搜索最后插入的id,而不是使用SCOPE_IDENTITY()

解决方案: - 我尝试使用手动查询而不是pdo lastInsertId()方法对laravel源进行拉取请求。它被拒绝了。 - 另一个解决方案是创建一个扩展PDO的类,并使laravel使用我的类而不是本机pdo。但我不知道该怎么做。

你们能帮助我吗?谢谢!

sql-server laravel inheritance pdo laravel-5.1
1个回答
0
投票

我解决了!顺便说一句,这真的很容易,我无法想象我是怎么想的。我做了什么?让我解释:

  • 首先,我在项目中创建了一个来自SqlServerGrammar的子项
  • 在我的SqlServerGrammar中,我重写了compileInsert方法
  • 在我的AppServiceProvider上的boot方法中,我更改了连接使用的语法,这样:\ DB :: connection() - > setQueryGramar(app(App \ Classes \ MyCustom \ SqlServerGrammar :: class));
© www.soinside.com 2019 - 2024. All rights reserved.