php - No se puede crear un nuevo modelo a través de MassAssignment, causa QueryException Duplicate Entry
laravel eloquent (1)
Estoy aprendiendo Laravel
y cuando intenté insertar un usuario a través de un artisan tinker
con el siguiente código
$user = App/User::create([
''username''=>''johnd'',
''first_name''=>''john'',
''last_name''=>''doe'',
''email''=>''[email protected]'',
''password''=>''thisShouldBeRandom'',
''shool_id''=>1,''type''=>''TEACHER''
]);
Lanza este error:
Illuminate/Database/QueryException with message ''SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '''' for key ''username'' (SQL: insert into `users` (`first_name`, `last_name`, `type`, `updated_at`, `created_at`) values (john, doe, TEACHER, 2015-12-22 07:12:49, 2015-12-22 07:12:49))''
Mi modelo es:
namespace App;
use App/School;
use Illuminate/Auth/Authenticatable;
use Illuminate/Auth/Passwords/CanResetPassword;
use Illuminate/Contracts/Auth/Access/Authorizable as AuthorizableContract;
use Illuminate/Contracts/Auth/Authenticatable as AuthenticatableContract;
use Illuminate/Contracts/Auth/CanResetPassword as CanResetPasswordContract;
use Illuminate/Database/Eloquent/Model;
use Illuminate/Foundation/Auth/Access/Authorizable;
use League/Flysystem/Exception;
use URL;
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 = [''school_id'', ''type''];
/**
* The attributes that are NOT mass assignable.
*
* @var array
*/
protected $guarded = [''email'', ''password'', ''username''];
}
También noté que en el error solo intenta insertar las siguientes columnas en first_name
, last_name
, type
, updated_at
, created_at
cuando también created_at
username
de username
en la matriz. ¿Algo que me falta?
EDITAR
Parece que tengo que agregar el username, email
de username, email
y el resto de los campos en la propiedad de fillable
, sin embargo, creo que esto podría hacer que unsecure
sea unsecure
ya que se puede completar a partir de una solicitud.Creo que esto es más apropiado con datos públicos, como artículos, publicaciones, comentarios, etc. Estoy pensando en ir con un enfoque diferente para los datos confidenciales, aunque podría estar equivocado. Nuevamente gracias por toda la ayuda!
PD Al probar con el artisan tinker
asegúrese de cerrar la instancia y ejecutar de nuevo cuando modifique el código, ya que mantiene la instancia compilada anterior y no ve cambios. Me tomó un tiempo darme cuenta y me causó muchos dolores de cabeza.
Debes eliminar ''usuario'' de $guarded
y ponerlo en $fillable
.
Con ''username'' en $guarded
, impide que se establezca el campo. Entonces, la base de datos intenta crear / actualizar el campo ''nombre de usuario'' con el valor predeterminado de vacío, y sucede que ya tiene una fila con un nombre de usuario vacío (debido al mismo error).
En realidad, elimine todos los nombres de columna que necesita para especificar $guarded
y póngalos en $fillable
, porque creo que querrá tener "correo electrónico" y "contraseña" creados / actualizados.