2016-12-09 40 views
0

的值使用laravel上的eloquent和auth来注册和登录用户,但即时通讯在注册控制器的创建函数中遇到问题。问题是,如果由于字段没有默认值而导致插入失败(这意味着它无法获得该字段的任何值,它会尝试获取默认值,如果它没有,那么它就是样子。 这是控制器代码:Laravel雄辩的插入查询无法捕获来自输入

protected function validator(array $data) 
{ 
    // terminar validacion 

    //dd($data['nacimiento']); 
    return Validator::make($data, [ 
     'name' => 'required|max:255', 
     'lastname' => 'required|max:255', 
     'nacimiento' => 'date_format:"Y-m-d"|required', 
     'email' => 'required|email|max:255|unique:users', 
     'password' => 'required|min:6|confirmed', 
     'password_confirmation' => 'required|min:6|' 
    ]); 
} 

/** 
* Create a new user instance after a valid registration. 
* 
* @param array $data 
* @return User 
*/ 
protected function create(array $data) 
{ 
    if(!isset($data['avisos'])){ 
     $data['avisos'] = 0; 
    } 
    if(!isset($data['actualizaciones'])){ 
     $data['actualizaciones'] = 0; 
    } 
    if(!isset($data['ofertas'])){ 
     $data['ofertas'] = 0; 
    } 
    // dd($data); 
    dd(User::create([ 
     'name' => $data['name'], 
     'lastname' => $data['lastname'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
     'nacimiento' => $data['nacimiento'], 
     'suscAvisos' => $data['avisos'], 
     'suscOfertas' => $data['ofertas'], 
     'suscActualizaciones' => $data['actualizaciones'], 
    ])); 
} 

,这是我的注册形式来看

<form action="/register" method="POST" class='form-reg'> 
    {{ csrf_field() }} 
    <fieldset class="datos"> 
     @foreach($errors->all() as $error) 
     <span class="error">{{ $error }}</span> <br> 
     @endforeach 
     <label> 
      Nombre 
      <input type="text" name="name" value='' class="name"> 
     </label> 
     <label> 
      Apellido 
      <input type="text" name="lastname" value='' class="apellido"> 
     </label> 
     <label> 
      Email 
      <input type="email" name="email" value='' class="mail"> 
     </label> 
     <label> 
      Fecha de nacimiento 
      <input type="date" name="nacimiento" value='' class="birthday"> 
     </label> 
     <label> 
      Contraseña 
      <input type="password" name="password" value="" class="password"> 
     </label> 
     <label> 
      Repetir la contraseña 
      <input type="password" name="password_confirmation" value="" class="passwordRepeat"> 
     </label> 
     <section class="suscripciones"> 
      <div clas="susc"> 
       <input type="checkbox" name="avisos" value="1" class="checks"> 
       <div class="susc-datos"> 
        <h6>Avisos</h6> 
        <p>Recibir avisos, recomendaciones y actualizaciones sobre productos, servicios, actualizaciones de Nexround y más.</p> 
       </div> 
      </div> 
      <div class="susc"> 
       <input type="checkbox" name="ofertas" value="1" class="checks"> 
       <div class="susc-datos"> 
        <h6>Ofertas de Nexround</h6> 
        <p>Recibir recomendaciones, lo más reciente, ofertas especiales y contenido exclusivo y más.</p> 
       </div> 
      </div> 
      <div class="susc"> 
       <input type="checkbox" name="actualizaciones" value="1" class="checks"> 
       <div class="susc-datos"> 
        <h6>Actualizaciones de Nexround News</h6> 
        <p>Recibe los mejores artículos y recomendaciones de Noticias de Nexround enviadas directamente a tu bandeja de entrada.</p> 
       </div> 
      </div> 
     </section> 
     <div class="clear"></div> 
     <button type='submit' class="continuar-boton">Registrar</button> 
    </fieldset> 
    </form> 

错误显示了这个

SQLSTATE[HY000]: General error: 1364 Field 'nacimiento' doesn't have a default value (SQL: insert into `users` (`name`, `lastname`, `email`, `password`, `suscAvisos`, `suscOfertas`, `suscActualizaciones`, `updated_at`, `created_at`) values (fela, bird, [email protected], $2y$10$SrvLDve6tJS/cLd5vWLK/eCwp1T/x4sIUcLelUpgFxvcSqNCfC7KW, 0, 0, 0, 2016-12-09 18:25:48, 2016-12-09 18:25:48)) 

我知道WH。在错误的手段,为什么它造成的,但我只是无法找到错误,为什么查询没有我的'nacimiento'值。 我调试创建和验证功能,看看数据['nacimiento']是否有东西,它确实。这就是为什么我很困惑

+3

是'nacimiento'了'$ fillable'阵列的用户模型? – Devon

+0

你使用迁移来创建你的表吗?如果需要,请发布您的用户表迁移。您可能需要检查'nacimento'是否为空。 – STWilson

+0

omg,nacimiento was not on the fillable。该死的愚蠢。谢谢您的帮助!!!真! –

回答

0

问题是'nacimiento'没有在$可变的变量。谢谢德文。

+0

没问题,当使用像创建或更新这样的批量赋值方法时,您需要将这些字段包含在'$ fillable'中或从'$ guarded'中排除。 – Devon

-3

,请改变你的数据库结构已分配“纳西缅托”一栏默认值 或将其更改为默认为空

+0

这是一个很好的解决问题的方法,也许他们不希望在此列中使用默认值或空值。他们已经在分配问题。 – Devon