Я пытаюсь добавить капчу на все мои модели, но я имею эту ошибку:Laravel 5 Модель не вставляет заданное поле в базу данных
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`)
Я простирающуюся пользовательский класс модель, которая будет автоматический Validate перед сохранением, здесь файл 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;
}
}
и вот модель депозита
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
use DB;
class Deposit extends BaseModel {
use SoftDeletes;
const REWARD_METHOD_1 = 1;
const REWARD_METHOD_2 = 2;
protected $dates = ['deleted_at'];
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'deposit_records';
protected $fillable = array(
'reference_number', 'deposit_amount', 'deposit_bank', 'deposit_bank_account', 'deposit_bank_holder', 'deposit_reference', 'deposit_datetime', 'deposit_receipt',
'bank_id', 'ban_reason', 'deposit_promotion', 'g-recaptcha-response', 'reward_method', 'captcha'
);
public static $rules = array(
'user_id' => 'required|exists:users,id',
'reference_number' => 'required|min:1',
'deposit_amount' => 'required|isFund',
'deposit_bank' => 'required|min:1',
'deposit_bank_account' => 'required|min:1',
'deposit_bank_holder' => 'required|min:1',
'deposit_reference' => 'min:1',
'deposit_datetime' => 'required|date',
'deposit_receipt' => 'min:1',
'bank_id' => 'required|exists:site_banks,id',
'approve_one_by' => 'exists:users,id',
'approve_one_at' => 'date',
'approve_two_by' => 'exists:users,id',
'approve_two_at' => 'date',
'ban_by' => 'exists:users,id',
'ban_at' => 'date',
'ban_reason' => 'min:1',
'deposit_promotion' => '',
'status' => 'in:0,1,2',
'reward_method' => 'required|in:1,2',
'captcha' => 'required|isRealPerson',
);
public function user() {
return $this->belongsTo('App\\Models\\User', 'user_id');
}
public function depositBank() {
return $this->hasOne('App\\Models\\SiteBanks', 'id', 'bank_id');
}
public function approveOne() {
return $this->hasOne('App\\Models\\User', 'id', 'approve_one_by');
}
public function approveTwo() {
return $this->hasOne('App\\Models\\User', 'id', 'approve_two_by');
}
public function banBy() {
return $this->hasOne('App\\Models\\User', 'id', 'ban_by');
}
}
и в моем контроллере, я звоню, как это, и он будет автоматически проверять поле и вернуть ошибку
$deposit = new Deposit();
$deposit->fill(Input::all());
$deposit->deposit_bank = $sb->bank_name;
$deposit->deposit_bank_holder = $sb->bank_holder;
$deposit->deposit_bank_account = $sb->bank_account;
$deposit->user_id = $this->_G['user']->id;
if ($deposit->save()) {
addSuccess('Successfully submit deposit request, please wait for verification.');
return makeJSONResponse(true, 'Successfully submit deposit request, please wait for verification.');
} else {
return makeJSONResponse(false, 'Please fix the following error(s).', $deposit->errors->all());
}
, но после того, как я добавить дополнительное поле, которое не существует в базе данных, то держать ошибку на поле не найдено, но я понятия не имею, как я могу решить эту проблему, не удаляя автоматическое подтверждение, автоматическое подтверждение полезно и экономит много времени.
В Laravel 4.1, я могу сделать это как следующий
//Deposit Model
public function beforeSave() {
unset($this->{"g-recaptcha-response"});
unset($this->gRecaptchaResponse);
}
Просто, чтобы подтвердить, вы добавили поле «captcha» в свой стол? –
нет, и я не хочу, чтобы captcha был вставлен, потому что это просто captcha – user259752
Просто интересно, не следует ли вынимать его из защищенного массива $ fillable? –