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

时间:2015-12-20 11:52:49

标签: sql-server laravel inheritance pdo laravel-5.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。但我不知道该怎么做。

你能帮助我吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

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

  • 首先,我在项目
  • 中创建了一个来自SqlServerGrammar的子项
  • 在我的SqlServerGrammar中,我覆盖了compileInsert方法
  • 在我的AppServiceProvider上的启动方法中,我更改了连接使用的语法,这样:\ DB :: connection() - &gt; setQueryGramar(app(App \ Classes \ MyCustom \ SqlServerGrammar :: class)); < / LI>