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

来自php reference

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

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,因此从数组中删除。