它必须做什么:
我正在尝试使用Laravel从头开始创建自己的密码重置。 我有一个password_resets表,该表具有3列:email,token,created_at。 我让用户输入要将密码重置邮件发送到的电子邮件。 用户输入电子邮件后,我的ResetController中的“发送”功能将检查用户表中是否存在电子邮件ID。 如果存在,那么将创建一个令牌,然后将电子邮件和令牌存储在password_resets表中。 然后,将恢复邮件发送到带有重置密码的链接的电子邮件地址。
哪里出了错
当我尝试将数据保存到password_resets表时,laravel抛出此错误:
SQLSTATE [42S22]:找不到列:1054'字段列表'中的未知列'updated_at'(SQL:插入
password_resets
(updated_at
,created_at
)值中(2018- 07-07 13:11:15,2018-07-07 13:11:15))
但是我的password_resets表中没有updated_at列
下面是password_resets表的结构:
给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
]);
}
}
}
答案 0 :(得分:1)
默认情况下,Eloquent希望
created_at
和updated_at
列 存在于您的桌子上。如果您不希望有这些列 由Eloquent自动管理,将$timestamps
属性设置为 您的模型为假:
因此,您可以通过在模型中添加public $timestamps = false;
来解决问题。
或者,您可以通过向迁移中添加$table->timestamps();
并将其推出来将时间戳记字段添加到表中。请参阅Laravel文档中的可用列类型 creating columns。
答案 1 :(得分:0)
如果设置 public $timestamps = false;
,则将 created_at 和 updated_at 值设置为 null。
如果您想为这些字段(created_at、updated_at)单独设置值,那么有一个解决方案。
解决方案 1: 您有 created_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