雄辩中的重复键更新 [英] ON DUPLICATE KEY UPDATE in Eloquent
问题描述
我刚刚开始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');
}
更详细的问题
< br>
我无法获得重复密钥更新部分工作。
每次更新时,都会创建一个新的条目。我希望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 KEY
UPDATE geschichte_id = :geschichte_id,
geschichte_text1 = :geschichte_text1,
geschichte_text2 = :geschichte_text2,
geschichte_text3 = :geschichte_text3;
Controller function
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');
}
The problem in more detail
I 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
<?php
use 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.
这篇关于雄辩中的重复键更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!