Laravel 相交不会得到输入
Laravel intersect wont get input
我的更新方法有交集:
$inputs = $request->intersect('message','name','email','is_read');
如果我发送一个更新请求,其中 is_read=0 与 returns 相交一个空数组。适用于其他任何东西(false、1 等)
有什么建议吗?
谢谢!
警报
尝试移动到另一个实现并停止使用 intersect()
方法,它将从 Laravel 的未来版本中删除:Link
如果您的意思是最终数组中缺少 is_read
键(而不是整个数组为空,请参阅我的评论),这是因为 intersect()
的实现方法。
intersect
方法简单地包装 Illuminate\Http\Request
class 的 only()
方法并对结果进行 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
的工作原理。它期望一个数组作为第一个参数,然后是一个可选的回调(用于过滤数组)和一个标志。
当没有提供回调时会发生什么(就像在这种情况下?)
If no callback is supplied, all entries of array equal to FALSE (see converting to boolean) will be removed.
如果您查看 link converting to boolean,您会发现 0(零)被假定为 FALSE,因此从数组中删除。
我的更新方法有交集:
$inputs = $request->intersect('message','name','email','is_read');
如果我发送一个更新请求,其中 is_read=0 与 returns 相交一个空数组。适用于其他任何东西(false、1 等)
有什么建议吗?
谢谢!
警报
尝试移动到另一个实现并停止使用 intersect()
方法,它将从 Laravel 的未来版本中删除:Link
如果您的意思是最终数组中缺少 is_read
键(而不是整个数组为空,请参阅我的评论),这是因为 intersect()
的实现方法。
intersect
方法简单地包装 Illuminate\Http\Request
class 的 only()
方法并对结果进行 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
的工作原理。它期望一个数组作为第一个参数,然后是一个可选的回调(用于过滤数组)和一个标志。
当没有提供回调时会发生什么(就像在这种情况下?)
If no callback is supplied, all entries of array equal to FALSE (see converting to boolean) will be removed.
如果您查看 link converting to boolean,您会发现 0(零)被假定为 FALSE,因此从数组中删除。