【问题标题】:Unknown Column Error when creating Custom Password Reset - Laravel创建自定义密码重置时出现未知列错误 - Laravel
【发布时间】:2018-12-15 21:27:36
【问题描述】:

必须做什么:

我正在尝试使用 Laravel 从头开始​​创建自己的密码重置。 我有一个 password_resets 表,它有 3 列:email、token、created_at。 我让用户输入要发送密码重置邮件的电子邮件。 用户输入电子邮件后,我的 ResetController 中的“发送”函数会检查电子邮件 ID 是否存在于用户表中。 如果存在,则创建一个令牌,然后将电子邮件和令牌存储在 password_resets 表中。 然后会向该电子邮件地址发送一封恢复邮件,其中包含重置密码的链接。

哪里出错了

当我尝试将数据保存到我的密码重置表时,laravel 抛出此错误:

SQLSTATE[42S22]:未找到列:1054 '字段列表'中的未知列'updated_at'(SQL:插入password_resetsupdated_atcreated_at)值(2018-07-07 13:11 :15, 2018-07-07 13:11:15))

但是我的 password_resets 表中没有 updated_at 列

下面是密码重置表的结构:

电子邮件 varchar(191) - 令牌 varchar(191) - created_at 时间戳

我的 ResetController 文件:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\User;
use App\PasswordReset;

class ResetController extends Controller
{
  public function show() 
  {
    return view('reset.index');
  }

  public function send() 
  {
        $email = request('resetemail');

        if(User::get()->where('email','lol@lol.com')!=null)
        {
            $token = bin2hex(openssl_random_pseudo_bytes(16));

            PasswordReset::create([
            'email'=> $email,
            'token'=> $token
            ]);
        }
   }  
 }

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    根据Eloquent Model Conventions

    默认情况下,Eloquent 期望 created_atupdated_at 列 存在于您的桌子上。如果您不希望有这些列 由 Eloquent 自动管理,将 $timestamps 属性设置为 你的模型是假的:

    因此,您可以通过在模型中添加 public $timestamps = false; 来解决您的问题。

    或者,您可以通过将 $table-&gt;timestamps(); 添加到您的迁移并将其推出来将时间戳字段添加到您的表中。请参阅 Laravel 文档中的可用列类型creating columns

    【讨论】:

      【解决方案2】:

      如果您设置public $timestamps = false;,您会将 created_at 和 updated_at 值都设置为空。 如果您想为这些字段(created_at,updated_at)单独设置值,那么有一个解决方案。

      解决方案 1: 您已经创建了_at 列,但没有 update_at,您可以简单地将模型中的 updated_at 设置为 null

      class ABC extends Model {
      
      const UPDATED_AT = null;
      

      解决方案 2:您同时拥有 created_at 和 updated_at 列,但列名不同

      class ABC extends Model {
      
      const CREATED_AT = 'name_of_created_at_column';
      const UPDATED_AT = 'name_of_updated_at_column';
      

      解决方案 3: 两个字段都为空

      class ABC extends Model {
      
      public $timestamps = false
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-30
        • 2019-07-28
        • 2021-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-11
        相关资源
        最近更新 更多