Php Laravel 5模型未将指定字段插入数据库
我正在尝试将验证码添加到我的所有模型中,但出现以下错误:Php Laravel 5模型未将指定字段插入数据库,php,laravel,laravel-5,laravel-5.1,Php,Laravel,Laravel 5,Laravel 5.1,我正在尝试将验证码添加到我的所有模型中,但出现以下错误: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'captcha' in 'field list' (SQL: insert into `deposit_records` (`reference_number`, `deposit_amount`, `deposit_datetime`, `deposit_reference`, `reward_method`, `captch
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'captcha' in 'field list' (SQL: insert into `deposit_records` (`reference_number`, `deposit_amount`, `deposit_datetime`, `deposit_reference`, `reward_method`, `captcha`, `bank_id`, `deposit_bank`, `deposit_bank_holder`, `deposit_bank_account`, `user_id`, `updated_at`, `created_at`)
我正在扩展将在保存之前自动验证的自定义模型类,下面是BaseModel.php文件
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Validator;
class BaseModel extends Model {
/**
* Listen for save event
*
* @return void
*/
public static function boot() {
parent::boot();
static::creating(function($model) {
return $model->validate();
});
static::updating(function($model) {
return $model->validate();
});
static::saving(function($model) {
return $model->validate();
});
}
/**
* Validates current attributes against rules
*
* @return boolean
*/
public function validate() {
$rules = property_exists($this, 'rules') ? static::$rules : array();
$messages = property_exists($this, 'messages') ? static::$messages : array();
if (!empty($rules)) {
$replace = ($this->getKey() > 0) ? $this->getKey() : null;
foreach ($rules as $key => $rule) {
$rules[$key] = str_replace(':id', $replace, $rule);
}
$validation = Validator::make($this->attributes, $rules, $messages);
if ($validation->fails()) {
$this->errors = $validation->messages();
return false;
}
}
return true;
}
public function error()
{
return $this->errors ? $this->errors : null;
}
public function errors()
{
return $this->errors ? $this->errors : null;
}
}
但是在我添加了数据库中不存在的额外字段之后,它会保留未找到字段的错误,但是我不知道如何在不删除自动验证的情况下解决这个问题,自动验证很有用,并且节省了很多时间
在Laravel4.1中,我可以像下面这样做
//Deposit Model
public function beforeSave() {
unset($this->{"g-recaptcha-response"});
unset($this->gRecaptchaResponse);
}
我最终使用不同的方法,删除模型中的captcha规则,在中间件上验证它
<?php
namespace App\Http\Middleware;
use Closure;
use Sentinel;
use Input;
class VerifyCaptcha
{
public function handle($request, Closure $next)
{
if ((Input::has('captcha') && Input::get('captcha') != '') && (Input::has('captchaHash') && Input::get('captchaHash') != ''))
{
if (rpHash(Input::get('captcha')) == Input::get('captchaHash')) {
return $next($request);
} else {
return $this->errorResponse($request, 2);
}
} else {
return $this->errorResponse($request, 1);
}
}
public function errorResponse($request, $error) {
switch ($error) {
case 1:
$msg = 'Please keyin the captcha code first';
break;
case 2:
$msg = 'Wrong captcha code';
break;
default:
$msg = 'Unknown error, please refresh and try again';
break;
}
if ($request->ajax()) {
return makeJSONResponse(false, $msg);
} else {
addWarning($msg);
return redirect()->back()->withInput()->withErrors();
}
}
}
我最终使用不同的方法,删除模型中的验证码规则,在中间件上验证它
<?php
namespace App\Http\Middleware;
use Closure;
use Sentinel;
use Input;
class VerifyCaptcha
{
public function handle($request, Closure $next)
{
if ((Input::has('captcha') && Input::get('captcha') != '') && (Input::has('captchaHash') && Input::get('captchaHash') != ''))
{
if (rpHash(Input::get('captcha')) == Input::get('captchaHash')) {
return $next($request);
} else {
return $this->errorResponse($request, 2);
}
} else {
return $this->errorResponse($request, 1);
}
}
public function errorResponse($request, $error) {
switch ($error) {
case 1:
$msg = 'Please keyin the captcha code first';
break;
case 2:
$msg = 'Wrong captcha code';
break;
default:
$msg = 'Unknown error, please refresh and try again';
break;
}
if ($request->ajax()) {
return makeJSONResponse(false, $msg);
} else {
addWarning($msg);
return redirect()->back()->withInput()->withErrors();
}
}
}
只是为了确认,您已将字段“captcha”添加到表中?不,我不希望插入captcha,因为它只是captcha只是想知道您是否应该将其从受保护的$fillable数组中删除?将其从$fillable数组中删除$rules['captcha]='required | isCaptcha';将使模型验证始终返回“captcha field is required”,如果删除$rules['captcha',则一切正常(但永远不会验证验证码)。我知道这可以在控制器上手动执行,但我正在寻找类似laravel 4.1 beforeSave()的自动方法。只是为了确认,您添加了字段“captcha”到您的表中?不,我不希望插入验证码,因为它只是验证码。我只是想知道您是否不应该将其从受保护的$fillable数组中删除?将其从$fillable数组中删除$rules['captcha]='required | isCaptcha';将使模型验证始终返回“captcha field is required”,如果删除$rules['captcha',则一切都很好(但永远不会验证captcha)。我知道这可以在控制器上手动执行,但我正在寻找一种类似于laravel 4.1 beforeSave()的自动方式
<?php
namespace App\Http\Middleware;
use Closure;
use Sentinel;
use Input;
class VerifyCaptcha
{
public function handle($request, Closure $next)
{
if ((Input::has('captcha') && Input::get('captcha') != '') && (Input::has('captchaHash') && Input::get('captchaHash') != ''))
{
if (rpHash(Input::get('captcha')) == Input::get('captchaHash')) {
return $next($request);
} else {
return $this->errorResponse($request, 2);
}
} else {
return $this->errorResponse($request, 1);
}
}
public function errorResponse($request, $error) {
switch ($error) {
case 1:
$msg = 'Please keyin the captcha code first';
break;
case 2:
$msg = 'Wrong captcha code';
break;
default:
$msg = 'Unknown error, please refresh and try again';
break;
}
if ($request->ajax()) {
return makeJSONResponse(false, $msg);
} else {
addWarning($msg);
return redirect()->back()->withInput()->withErrors();
}
}
}