我正在Laravel 4中构建一个应用程序,我需要运行多个查询作为UPDATE或INSERT查询,以避免重复插入时出现PK违规。我无法通过Laravel中的查询构建器找到任何方法。
我可以修改DB类或类似的东西吗?或者我需要编写纯SQL语句吗?
答案 0 :(得分:11)
现在我们可以使用User::updateOrCreate()
答案 1 :(得分:9)
您可以使用DB :: statement。 http://laravel.com/docs/database
DB::statement('INSERT INTO comments (comments) values (?)', array('LOL'));
你可以在那里打开DUPLICATE KEY UPDATE。
遗憾的是,除非你做了像
这样的事情,否则没有办法(我知道)这样做很有说服力 $user = User::find(1);
if ($user === null) {
$user = new User;
}
$user->name = 'hey';
$user->save();
答案 2 :(得分:4)
如果Fluent支持ON DUPLICATE KEY UPDATE或INSERT IGNORE,那将是非常好的但似乎不是。我找到的最接近的解决方案是在模型上使用firstOrCreate()。
User::firstOrCreate( array('id'=>1, 'name'=>'hey') );
如果不在某些情况下写出完整的查询,这可能会满足您的需求。