在Laravel 5.1模型中将数据写入数据库之前,如何修改某些数据字段或更多验证? 关于该问题的文档很难在实际应用中使用:http://laravel.com/docs/5.1/eloquent#events
我的代码是
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Helpers\Tools as Tools;
class Atoken extends Model
{
/**
* The database table used by the model.
*
* @var string
*/
protected $table = 'atoken';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'token',
'user_id',
'role',
];
/**
* The attributes excluded from the model's JSON form.
*
* @var array
*/
protected $hidden = [
];
public static function newToken($userId, $role){
# Remove all token assoiciate with input user;
Atoken::where('user_id', $userId)->delete();
$params = [
'user_id' => $userId,
'role' => $role,
];
Atoken::insert($params);
$item = Atoken::where('user_id', $userId)->first();
return $item->token;
}
protected static function boot(){
static::creating(function ($model) {
$model->token = 'sometoken';
});
}
}
在这种情况下,我总是遇到错误:
SQLSTATE[23502]: Not null violation: 7 ERROR: null value in column \"token\" violates not-null constraint (SQL: insert into \"atoken\" (\"user_id\", \"role\") values (2, USER))
我该如何解决?
答案 0 :(得分:8)
class Lunch extends Eloquent
{
protected static function boot()
{
static::creating(function ($model) {
$model->topping = 'Butter';
return $model->validate();
});
}
protected function validate()
{
// Obviously do real validation here :)
return rand(0, 1) ? true : false;
}
public static function newToken($userId, $role)
{
static::where('user_id', $userId)->delete();
return static::create([
'user_id' => $userId,
'role' => $role,
])->token;
}
}
答案 1 :(得分:2)
我建议进入EventServiceProvider,并注册事件监听器
public function boot(DispatcherContract $events)
{
parent::boot($events);
// Register Event Listeners
\App\Product::updating(function ($product) {
$product->onUpdating();
});
...
然后在模型中创建函数onUpdating
。您也可以选择saving, saved, creating, created, updating, updated..
此文档包含更多内容: https://laravel.com/docs/5.1/eloquent#events