4

我正在 Laravel 4 中构建一个应用程序,我需要运行几个查询作为 UPDATE OR INSERT 查询以避免重复插入时的 PK 违规。我还没有找到任何方法来使用 Laravel 中的查询构建器来做到这一点。

我可以修改 DB 类或类似的东西吗?还是我只需要编写纯 SQL 语句?

4

3 回答 3

11

现在我们可以使用User::updateOrCreate()

于 2014-08-03T11:58:00.413 回答
9

您可以使用 DB::statement。http://laravel.com/docs/database

   DB::statement('INSERT INTO comments (comments) values (?)', array('LOL'));

您可以在其中放置 ON DUPLICATE KEY UPDATE。

不幸的是,除非你做类似的事情,否则没有办法(据我所知)用雄辩的

  $user = User::find(1);

  if ($user === null) {
       $user = new User;
  }
  $user->name = 'hey'; 
  $user->save();
于 2013-06-28T17:11:59.273 回答
4

如果 Fluent 支持 ON DUPLICATE KEY UPDATE 或 INSERT IGNORE 会非常好,但它似乎不支持。我找到的最接近的解决方案是在您的模型上使用 firstOrCreate() 。

User::firstOrCreate( array('id'=>1, 'name'=>'hey') );

在某些情况下,这可能会满足您的需要,而无需写出完整的查询。

于 2014-02-14T13:37:51.493 回答