我试图剥离所有空字段,使其不从表单提交到数据库中(使用Mongo-Moloquent扩展Eloquent)。
我有一个基本模型:
class Base extends Moloquent {
public static function boot(){
parent::boot();
static::saving( function($model){
$arr = $model->toArray();
$removed = array_diff($arr, array_filter($arr));
foreach($removed as $k => $v) $model->__unset($k);
return true;
});
}
}
然后扩展它:
class MyModel extends Base{
public static function boot(){
parent::boot()
}
}
但这对子类(MyModel)没有影响;我想我只是缺少一些显而易见的东西,即我(当前)的隧道视野不会让我看到。
对于任何寻求解决方案的人;我设置了一个中间件来去除所有空的输入字段,然后在保存方法中执行相同的操作。
/* app/Http/Middleware/StripRequest.php */
use Closure;
class StripRequest {
public function handle($request, Closure $next)
{
$request->replace(array_filter($request->all()));
return $next($request);
}
}
请记住将其添加到内核中$middleware
:
/* app/Http/Kernel.php */
protected $middleware = [
'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
'Illuminate\Cookie\Middleware\EncryptCookies',
'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
'Illuminate\Session\Middleware\StartSession',
'Illuminate\View\Middleware\ShareErrorsFromSession',
'app\Http\Middleware\StripRequest',
];
从那里我使用了与上面指定的相同的模型。只要记住要parent::__construct()
在构造函数中使用或以任何其他方法调用parent。对我有用的方法:
/* app/Models/Base.php */
static::saving(function($model){
// Clear out the empty attributes
$keep = array_filter($model->getAttributes(), function($item){ return empty($item); });
foreach($keep as $k => $v) $model->unset($k);
// Have to return true
return true;
});
我unset()
从https://github.com/jenssegers/laravel-mongodb#mongodb-specific-operations使用
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句