我正在尝试使用大量分配 Eloquent 功能创建实体...
$new = new Contact(Input::all());
$new->save();
问题是这样,每个字段都填充了一个空字符串,而不是我期望的
null
值。我目前正在开发系统,但仍未定义一些表列,这就是使用此方法的原因,以避免将每个新字段都添加到
$fillable
数组和new Contact(array(...));
中。此外,我在此表中大约有20个字段,因此,具有如下数组会比较难看
$new = new Contact(array(
'salutation' => Input::get('salutation'),
'first_name' => Input::get('first_name'),
'last_name' => Input::get('last_name'),
'company_id' => Input::get('company_id'),
'city' => ...
...
));
有关如何执行此操作或修复的任何提示?
更新到现在为止,我已经在
App::before()
过滤器中使用array_filter进行了整理。更新在过滤器中有点困惑。我最终做了:
public static function allEmptyIdsToNull()
{
$input = Input::all();
$result = preg_grep_keys ( '/_id$/' , $input );
$nulledResults = array_map(function($item) {
if (empty($item))
return null;
return $item;
}, $result);
return array_merge($input, $nulledResults);
}
并在我的functions.php中。
if ( ! function_exists('preg_grep_keys'))
{
/**
* This function gets does the same as preg_grep but applies the regex
* to the array keys instead to the array values as this last does.
* Returns an array containing only the keys that match the exp.
*
* @author Daniel Klein
*
* @param string $pattern
* @param array $input
* @param integer $flags
* @return array
*/
function preg_grep_keys($pattern, array $input, $flags = 0) {
return array_intersect_key($input, array_flip(preg_grep($pattern, array_keys($input), $flags)));
}
}
现在,仅使用以“_id”结尾的字段。这是我最大的问题,因为如果关系不是
NULL
,则数据库将抛出错误,因为找不到外键“”。完美的作品。任何意见?
最佳答案
使用模型“保存”事件查找空模型并将其显式设置为null。在此示例中,“项目”是我的模型的名称。将其放在一个辅助函数中,并将其连接到所有模型。
Project::saving(function($model) {
foreach ($model->toArray() as $name => $value) {
if (empty($value)) {
$model->{$name} = null;
}
}
return true;
});
LARAVEL 5的更新(2016年4月11日)
我还结束了创建Http中间件的工作,以清除http请求中的输入数据,以及在将数据发送到数据库之前对其进行清除。
class InputCleanup
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$input = $request->input();
array_walk_recursive($input, function(&$value) {
if (is_string($value)) {
$value = StringHelper::trimNull($value);
}
});
$request->replace($input);
return $next($request);
}
}
关于php - 空字符串而不是空值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17452923/