我正在 Laravel 4 中构建一个应用程序,我需要运行几个查询作为 UPDATE OR INSERT 查询以避免重复插入时的 PK 违规。我还没有找到任何方法来使用 Laravel 中的查询构建器来做到这一点。
我可以修改 DB 类或类似的东西吗?还是我只需要编写纯 SQL 语句?
现在我们可以使用User::updateOrCreate()
您可以使用 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();
如果 Fluent 支持 ON DUPLICATE KEY UPDATE 或 INSERT IGNORE 会非常好,但它似乎不支持。我找到的最接近的解决方案是在您的模型上使用 firstOrCreate() 。
User::firstOrCreate( array('id'=>1, 'name'=>'hey') );
在某些情况下,这可能会满足您的需要,而无需写出完整的查询。