que plantillas motor index gratis for example entre diferencias descargar content ciclo laravel laravel-5 eloquent query-builder

plantillas - Laravel 5.1 Crear o actualizar en duplicado



que es el motor de plantillas blade (5)

Agregue el siguiente método insertUpdate a su modelo

<?php namespace App; use Illuminate/Auth/Authenticatable; use Illuminate/Database/Eloquent/Model; use Illuminate/Auth/Passwords/CanResetPassword; use Illuminate/Foundation/Auth/Access/Authorizable; use Illuminate/Contracts/Auth/Authenticatable as AuthenticatableContract; use Illuminate/Contracts/Auth/Access/Authorizable as AuthorizableContract; use Illuminate/Contracts/Auth/CanResetPassword as CanResetPasswordContract; class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract { use Authenticatable, Authorizable, CanResetPassword; /** * The database table used by the model. * * @var string */ protected $table = ''users''; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [''name'', ''email'', ''password'']; /** * The attributes excluded from the model''s JSON form. * * @var array */ protected $hidden = [''password'', ''remember_token'']; public static function insertUpdate(array $attributes = []) { $model = new static($attributes); $model->fill($attributes); if ($model->usesTimestamps()) { $model->updateTimestamps(); } $attributes = $model->getAttributes(); $query = $model->newBaseQueryBuilder(); $processor = $query->getProcessor(); $grammar = $query->getGrammar(); $table = $grammar->wrapTable($model->getTable()); $keyName = $model->getKeyName(); $columns = $grammar->columnize(array_keys($attributes)); $insertValues = $grammar->parameterize($attributes); $updateValues = []; if ($model->primaryKey !== null) { $updateValues[] = "{$grammar->wrap($keyName)} = LAST_INSERT_ID({$keyName})"; } foreach ($attributes as $k => $v) { $updateValues[] = sprintf("%s = ''%s''", $grammar->wrap($k), $v); } $updateValues = join('','', $updateValues); $sql = "insert into {$table} ({$columns}) values ({$insertValues}) on duplicate key update {$updateValues}"; $id = $processor->processInsertGetId($query, $sql, array_values($attributes)); $model->setAttribute($keyName, $id); return $model; } }

Puedes usar:

App/User::insertUpdate([ ''name'' => ''Marco Pedraza'', ''email'' => ''[email protected]'' ]);

La siguiente consulta será ejecutada:

insert into `users` (`name`, `email`, `updated_at`, `created_at`) values (?, ?, ?, ?) on duplicate key update `id` = LAST_INSERT_ID(id),`name` = ''Marco Pedraza'',`email` = ''[email protected]'',`updated_at` = ''2016-11-02 01:30:05'',`created_at` = ''2016-11-02 01:30:05''

El método agrega / elimina automáticamente las marcas de tiempo de Eloquent si ha habilitado o deshabilitado.

En Laravel 5.1, para la inserción en MySQL, quiero ver si el registro ya existe y actualizarlo por duplicado o crear nuevo si no existe.

Ya he buscado SO donde estaban las respuestas para versiones anteriores de laravel. En uno de los temas anteriores, dijo que el año pasado se agregó un nuevo método updateOrCreate() . Pero cuando intento eso, me sale el error:

Integrity constraint violation: 1062 Duplicate entry ''1'' for key ''app_id''

Esta es la consulta que utilizo:

AppInfo::updateOrCreate(array( ''app_id'' => $postData[''appId''], ''contact_email'' => $postData[''contactEmail''] ));

Donde app_id es la clave externa única en esa tabla y quiero actualizar el registro si existe o crear uno nuevo. He intentado buscar en los documentos 5.1 y no pude encontrar la información que necesito. ¿Puede alguien guiarme aquí por favor ...


Creé un paquete para trabajar con MySQL insert en clave duplicada.

Puede ser útil para otros:

https://packagist.org/packages/yadakhov/insert-on-duplicate-key

Ejemplo:

/** * Class User. */ class User extends Model { use Yadakhov/InsertOnDuplicateKey; ... } // associative array must match column names $users = [ [''id'' => 1, ''email'' => ''[email protected]'', ''name'' => ''User One''], [''id'' => 2, ''email'' => ''[email protected]'', ''name'' => ''User Two''], [''id'' => 3, ''email'' => ''[email protected]'', ''name'' => ''User Three''], ]; User::insertOnDuplicateKey($users);


Estoy respondiendo a esta pregunta porque no puedo encontrar ninguna respuesta relacionada con ON DUPLICATE KEY UPDATE, aunque estoy usando Laravel 5.4 . Si observa el método updateOrCreate en el código central de Laravel, verá que, después de todo, Laravel está utilizando 2 consultas diferentes: una para actualizar y otra para crear. Debido a esto, a veces puede obtener datos duplicados en la base de datos. Entonces, en algunos casos, puede ser útil escribir este tipo de consulta en bruto:

DB :: statement ("INSERT INTO col_1 ( col_1 , col_2 ) VALORES (?,?) EN LA ACTUALIZACIÓN DE LA LLAVE DUPLICADA col_1 = col_1 + 1", ([val_1, val_2]));

Espero que pueda ser de utilidad para alguien.


Para usar la función laravel updateOrCreate , necesita un ID de incremento automático en su tabla.

lo que están haciendo es

select id from your_table where your_attributes

después de eso obtendré la identificación de incremento automático

entonces

update your_table set your_values where field_id


Según la Definición del Método del Modelo Elocuente "updateOrCreate ()"

función updateOrCreate (array $ atributos, array $ valores = []) {}

se necesitan dos argumentos ...

  1. uno es los atributos con los que desea verificar la base de datos si el registro está presente
  2. En segundo lugar están los nuevos valores de atributo que desea crear o actualizar.

AppInfo::updateOrCreate([''app_id'' => $postData[''appId'']], [''contact_email'' => $postData[''contactEmail'']]);