我的更新方法中有一个交叉点:
$inputs = $request->intersect('message','name','email','is_read');
如果我发送更新请求,其中is_read = 0,则intersect返回一个空数组。适用于其他任何事情(假,1等)
任何提示?
谢谢!
答案 0 :(得分:3)
<强> ALERT 强>
尝试转移到另一个实现并停止使用intersect()
方法,它将从Laravel的未来版本中删除:Link
如果你的意思是最终数组中缺少is_read
键(而不是整个数组都是空的,请参阅我的评论),这是因为intersect()
方法的实现。
intersect
方法只包含only()
类的Illuminate\Http\Request
方法,并对结果执行array_filter
。
这是实施:
/**
* Intersect an array of items with the input data.
*
* @param array|mixed $keys
* @return array
*/
public function intersect($keys)
{
return array_filter($this->only(is_array($keys) ? $keys : func_get_args()));
}
在您的情况下,我们可以将代码分解为:
第1步
$results = $request->only('message','name','email','is_read');
此时,$results
是
Array
(
[message] => message
[name] => name
[email] => email
[is_read] => 0
)
然而,在第2步
<强>步骤2 强>
$filteredResults = array_filter($results);
结果变为
Array
(
[message] => message
[name] => name
[email] => email
)
这是因为array_filter
的工作方式。它期望一个数组作为第一个参数,然后是一个可选的回调(用于过滤数组)和一个标志。
当没有提供回调时会发生什么情况(例如在这种情况下?)
如果没有提供回调,则将删除所有等于FALSE的数组条目(参见converting to boolean)。
如果查看链接converting to boolean,您会看到0(零)被假定为FALSE,因此从数组中删除。