本文介绍了雄辩中的重复键更新的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 29岁程序员,3月因学历无情被辞! 我刚刚开始Laravel,所有我想做的就是获得以下查询在口才中工作: $ {code $ INSERT INTO geschichte(geschichte_id, geschichte_text1, geschichte_text2, geschichte_text3) VALUES(:geschichte_id,: geschichte_text1,:geschichte_text2,:geschichte_text3) ON DUPLICATE KEY 更新geschichte_id =:geschichte_id, geschichte_text1 =:geschichte_text1, geschichte_text2 =:geschichte_text2 , geschichte_text3 =:geschichte_text3; 控制器功能 public function alterGeschichte(Request $ request) { $ geschichte1 = new Geschichte; $ geschichte2 = new Geschichte; $ geschichte3 = new Geschichte; $ geschichte1 = Geschichte :: updateOrCreate( ['id'=> 1], ['geschichte_text1'=> $ request-> geschichte_text1] ); $ geschichte2 = Geschichte :: updateOrCreate( ['id'=> 2], ['geschichte_text2'=> $ request-> geschichte_text2] ); $ geschichte3 = Geschichte :: updateOrCreate( ['id'=> 3], ['geschichte_text3'=> $ request-> geschichte_text3] ); $ geschichte1> save(); $ geschichte2-> save(); $ geschichte3-> save(); return redirect('/ geschichte'); } 更详细的问题 我无法获得重复密钥更新部分工作。 每次更新时,都会创建一个新的条目。我希望id总是对于每个条目都是一样的,只是用这个id覆盖旧条目。 我会非常感谢任何一种帮助。我正在努力从这个小时... 更新 <?php 使用Illuminate\Database\Schema\Blueprint; 使用Illuminate\Database\Migrations\Migration; class CreateGeschichteTable extends Migration { / ** *运行迁移。 * * @return void * / public function up() {模式:: create('geschichte',功能(Blueprint $表){ $ table-> increment('id'); $ table-> text('geschichte_text1'); $ table-> text('geschichte_text2' ; $ table-> text('geschichte_text3'); $ table-> timestamps(); }); } / ** *反转迁移。 * * @return void * / public function down() { Schema :: drop('geschichte'); } } 解决方案你的控制器不应该是必要的。我也有点担心你正在使用的数据库结构,为什么要执行一个如你的控制器所示的任务。以下应该是您需要的: public function alterGeschichte(Request $ request) { Geschichte :: updateOrCreate( ['id'=> 1], ['id'=> 1,'geschichte_text1'=> $ request-> geschichte_text1] ); Geschichte :: updateOrCreate( ['id'=> 2], ['id'=> 2,'geschichte_text2'=> $ request-> ; geschichte_text2] ); Geschichte :: updateOrCreate( ['id'=> 3], ['id'=> 3,'geschichte_text3'=> $ request-> ; geschichte_text3] ); return redirect('/ geschichte'); } 如果这些创建新记录,那么很可能是因为没有记录这些ID。 I just started laravel and all I want to do is get following query working in Eloquent:INSERT INTO geschichte (geschichte_id, geschichte_text1, geschichte_text2, geschichte_text3)VALUES (:geschichte_id, :geschichte_text1, :geschichte_text2, :geschichte_text3)ON DUPLICATE KEYUPDATE geschichte_id = :geschichte_id, geschichte_text1 = :geschichte_text1, geschichte_text2 = :geschichte_text2, geschichte_text3 = :geschichte_text3;Controller functionpublic function alterGeschichte(Request $request){ $geschichte1 = new Geschichte; $geschichte2 = new Geschichte; $geschichte3 = new Geschichte; $geschichte1 = Geschichte::updateOrCreate( ['id' => 1], ['geschichte_text1' => $request->geschichte_text1] ); $geschichte2 = Geschichte::updateOrCreate( ['id' => 2], ['geschichte_text2' => $request->geschichte_text2] ); $geschichte3 = Geschichte::updateOrCreate( ['id' => 3], ['geschichte_text3' => $request->geschichte_text3] ); $geschichte1->save(); $geschichte2->save(); $geschichte3->save(); return redirect('/geschichte');}The problem in more detailI cannot get the 'on duplicate key update' part to work.There always is a new entry created for every time I update. I would like the id always to be the same for every entry and just overwrite the older entry with that id.I would be very thankful for any kind of help. I am struggling with this from hours...UPDATE<?phpuse Illuminate\Database\Schema\Blueprint;use Illuminate\Database\Migrations\Migration;class CreateGeschichteTable extends Migration{ /** * Run the migrations. * * @return void */ public function up() { Schema::create('geschichte', function (Blueprint $table) { $table->increments('id'); $table->text('geschichte_text1'); $table->text('geschichte_text2'); $table->text('geschichte_text3'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('geschichte'); }} 解决方案 Most of what is in your controller should not be necessary. I am also a little concerned about the database structure you are using as to why you would perform a task like shown in your controller. The following should be all you need:public function alterGeschichte(Request $request){ Geschichte::updateOrCreate( ['id' => 1], ['id' => 1, 'geschichte_text1' => $request->geschichte_text1] ); Geschichte::updateOrCreate( ['id' => 2], ['id' => 2, 'geschichte_text2' => $request->geschichte_text2] ); Geschichte::updateOrCreate( ['id' => 3], ['id' => 3, 'geschichte_text3' => $request->geschichte_text3] ); return redirect('/geschichte');}If these are creating new records it is most likely because there is no record with those ID's. 这篇关于雄辩中的重复键更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 上岸,阿里云!