Laravel相交不会得到输入

时间:2017-04-23 16:28:47

标签: php laravel intersect

我的更新方法中有一个交叉点:

$inputs = $request->intersect('message','name','email','is_read');

如果我发送更新请求,其中is_read = 0,则intersect返回一个空数组。适用于其他任何事情(假,1等)

任何提示?

谢谢!

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的工作方式。它期望一个数组作为第一个参数,然后是一个可选的回调(用于过滤数组)和一个标志。

来自php reference

当没有提供回调时会发生什么情况(例如在这种情况下?)

  

如果没有提供回调,则将删除所有等于FALSE的数组条目(参见converting to boolean)。

如果查看链接converting to boolean,您会看到0(零)被假定为FALSE,因此从数组中删除。