Как удалить нулевые значения из массива для проверки в столбце Laravel JSON - PullRequest
0 голосов
/ 13 февраля 2020

В модели Laravel я использую столбец JSON data для хранения пользовательских данных. Данные JSON могут быть вложенными для организации, и все ключи должны иметь непустые / ненулевые значения.

На данный момент все клавиши жестко запрограммированы в виде data[key] на интерфейсе. Если ранее сохраненный key имеет его value на внешнем интерфейсе, key должен быть сброшен в методе обновления. Однако после проверки я получаю исходный массив обратно.

// ModelController.php
public function update(Request $request, Model $model)
{
    // $request->data = ['key' => null, 'nested' => ['key' => null]]

    function stripEmptyCustom($data) {
        foreach ($data as $key => $value) {
            if (is_array($data[$key])){
                $data[$key] = stripEmptyCustom($data[$key]);
            }

            if (empty($value)){
                unset($data[$key]);
            }
        }

        return $data;
    }

    $request->data = stripEmptyCustom($request->data);

    dump($request->data);                   // so far, so good
                                            // $request->data = []

    $attributes = $request->validate([
        'name' => 'nullable',
        'data' => 'array',
    ]);

    dump($attributes);                      // $attributes['data'] =
                                            // ['key' => null, 'nested' => ['key' => null]]

Как проверить запрос без сброса исходных данных?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Я нашел способ обойти нулевые значения после проверки :

function stripEmptyCustom($data) {
    foreach ($data as $key => $value) {
        if (is_array($data[$key])){
            $data[$key] = stripEmptyCustom($data[$key]);
        }

        if (empty($value)){
            unset($data[$key]);
        }
    }

    return $data;
}

$attributes = $request->validate([
    'name' => 'nullable',
    'data' => 'array',
]);

$attributes = stripEmptyCustom($attributes);
0 голосов
/ 13 февраля 2020

Я думаю, что вы хотите вернуть только проверенные данные, а не весь ответ данных. Метод проверки продолжит работу контроллера нормально, если проверенные данные верны. Возможно, он где-то выполняет другой запрос.

я думаю, что вы ищете только те данные, которые являются действительными:

, используя что-то вроде: $request->validated();, надеюсь, решит вашу проблему:

Я ссылаюсь на эти ресурсы: Как получить ТОЛЬКО проверенные данные из laravel FormRequest?

документы для проверки: https://laravel.com/docs/5.6/validation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...