У меня есть пересечение в моем методе обновления:
$inputs = $request->intersect('message','name','email','is_read');
Если я отправляю запрос на обновление, где is_read = 0, пересечение возвращает пустой массив. Работает нормально со всем остальным (false, 1 и т. Д.)
Какие-нибудь советы?
Спасибо!
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
работает. Он ожидает массив в качестве первого параметра, затем необязательный обратный вызов (используется для фильтрации массива) и флаг.
Что происходит, когда обратный вызов не предоставляется (как в этом случае?)
Если обратного вызова не предоставлено, все записи массива равны FALSE (см. преобразование в логическое) будет удален.
Если вы посмотрите на ссылку преобразование в логическое вы увидите, что 0 (ноль) считается ЛОЖНЫМ и по этой причине удаляется из массива.
Других решений пока нет …