Пересечение Laravel не получит вход

У меня есть пересечение в моем методе обновления:

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

Если я отправляю запрос на обновление, где is_read = 0, пересечение возвращает пустой массив. Работает нормально со всем остальным (false, 1 и т. Д.)

Какие-нибудь советы?

Спасибо!

3

Решение

ALERT
Попробуйте перейти к другой реализации и прекратить использование intersect() Метод, он будет удален из будущих версий Laravel: Ссылка на сайт

Если вы имеете в виду, что 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

Что происходит, когда обратный вызов не предоставляется (как в этом случае?)

Если обратного вызова не предоставлено, все записи массива равны FALSE (см. преобразование в логическое) будет удален.

Если вы посмотрите на ссылку преобразование в логическое вы увидите, что 0 (ноль) считается ЛОЖНЫМ и по этой причине удаляется из массива.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]