updateorcreate update isn create conectar con laravel eloquent laravel-5.2

laravel - isn - ON DUPLICATE KEY UPDATE en Eloquent



updateorcreate (2)

La mayoría de lo que está en su controlador no debería ser necesario. También estoy un poco preocupado por la estructura de la base de datos que está utilizando sobre por qué realizaría una tarea como la que se muestra en su controlador. Lo siguiente debe ser todo lo que necesita:

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''); }

Si estos crean nuevos registros, lo más probable es que no haya ningún registro con esos ID.

Acabo de comenzar laravel y todo lo que quiero hacer es obtener la siguiente consulta trabajando en 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;

Función del controlador

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''); }

El problema en más detalle

No puedo hacer que funcione la parte de ''actualización de clave duplicada''.
Siempre hay una nueva entrada creada para cada vez que actualizo. Me gustaría que la identificación siempre sea la misma para cada entrada y simplemente sobrescribir la entrada más antigua con esa identificación.

Estaría muy agradecido por cualquier tipo de ayuda. Estoy luchando con esto de horas ...

ACTUALIZAR

<?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''); } }


Parece que no tiene una configuración de clave única en las columnas que desea que sean únicas. Para usar on duplicate key update , la necesitará para que su servidor de base de datos sepa si necesita insertar o actualizar.

Desafortunadamente, Laravel no tiene soporte para la sintaxis de on duplicate key update . Esto sería útil porque intenta insertar y si ya está en la tabla, actualizará las columnas en consecuencia en una consulta.

Al usar el método updateOrCreate de Laravel, primero consulta la tabla para ver si necesita generar una declaración de inserción o actualización y luego procede de acuerdo a esto. No tiene la ventaja de ejecutar solo una consulta, pero, al mismo tiempo, es Laravel quien maneja toda la lógica extra, por lo que es una pequeña compensación.