【问题标题】:How to make Laravel use my class instead of native PDO?如何让 Laravel 使用我的类而不是原生 PDO?
【发布时间】:2016-03-26 15:26:18
【问题描述】:

我在这里遇到了一个大问题。我使用 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。但我不知道该怎么做。

你们能帮帮我吗? 谢谢!

【问题讨论】:

  • 也许您可以更改 config/app.php 以使用您的提供者(和外观)而不是内置的。尝试创建 Laravel 包,以一种更简洁的方式将内容集成到您的应用程序中,这真的不是那么难,而且奖励是拥有一种可以很好地扩展的优雅方法。
  • 我使用另一种解决方案解决了我的问题。我已经从我的日志表中删除了主键字段

标签: sql-server laravel inheritance pdo laravel-5.1


【解决方案1】:

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

  • 首先,我在我的项目中从 SqlServerGrammar 创建了一个子项
  • 在我的 SqlServerGrammar 中,我重写了 compileInsert 方法
  • 在启动方法的 AppServiceProvider 中,我更改了我的连接使用的语法,这样:\DB::connection()->setQueryGramar(app(App\Classes\MyCustom\SqlServerGrammar::class));李>

【讨论】:

    猜你喜欢
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-10-03
    • 2017-08-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多