Таким образом, Laravel не удаляет вложенные элементы в проверке массива. Это проблема для меня, потому что я пытаюсь динамически обновлять отношения. Если пользователь подделывает другой Элемент, Laravel взрывается и выдает мне ошибку:
SQLSTATE[HY000]: General error: 1 no such column: country
Я проверил, где проблема, и это происходит:
$request->validated()
Если вы хотите проверить это, вот мой метод теста:
/** @test */
public function test() {
$result = $this->json('GET', route('test'), [
'test' => ['a' => 'test a', 'b' => 'I should not be here'],
'isIgnored' => 'no one is seeing that']
)->json());
}
В контроллере вы подтверждаете:
public function update()
{
$validatedData = request()->validate([
'test.a' => 'required'
]);
}
Результат $ validatedData равен
array:1 [
"test" => array:2 [
"a" => "test a"
"b" => "I should not be here"
]
]
Возможно, вы видите, что "isIgnored" был проигнорирован, но test.b нет. После этого мой контроллер пытается обновить модель с
$user->$relation()->update($values);
и взрывается. И я думал об использовании защищенного $ fillable, но все еще безуспешно. Это просто не игнорирует это.
Я использую sqlite для тестирования на Laravel 5.6.