Почему это не сохраняется в базе данных? - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь сохранить новый продукт в базе данных, этот продукт имеет факторы экспорта, которые я также пытаюсь сохранить, почему это не работает?

 if ($request->has('export_factors')) {
    $exportationFactors = [];

    foreach ($request->get('export_factors') as $item) {
        if (key_exists('country_id', $item)) {
            $export = ExportationFactor::where('country_id', $item['country_id'])->first();
        } else if (key_exists('fi', $item)) {
            $export = ExportationFactor::where('fi', $item['fi'])->first();
        } else if (key_exists('margin', $item)) {
            $export = ExportationFactor::where('margin', $item['margin'])->first();
        }

        $export->save();

        $exportationFactors[] = [
            "product_id" => $export->product_id,
             "country_id" => $export->country_id,
             "fi" => $export->fi,
             "margin" => $export->margin
        ];

        if (count($exportationFactors) > 0) {
            ExportationFactor::insert($exportationFactors);
        }

    }
}

Ошибка, яПолучение:

Вызов функции-члена save () в ноль

в линии $export->save();

Ответы [ 2 ]

1 голос
/ 19 сентября 2019

Поместите вставку вне цикла для повышения производительности и не сохраняйте то, чего там нет

$product_id = //you need to fill this one.
if ($request->has('export_factors')) {
    $exportationFactors = [];

    foreach ($request->get('export_factors') as $item) {
        $country_id = $item['country_id']??null;
        $fi = $item['fi']??null;
        $margin = $item['margin']??null;
        if (isset($fi, $margin, $country_id) {
            $exportationFactors[] = [
                "product_id" => $product_id,
                "country_id" => $country_id,
                "fi" => $fi,
                "margin" => $margin,
            ];
        }
    }
    if (count($exportationFactors)) {
        ExportationFactor::insert($exportationFactors);
    }
}
1 голос
/ 19 сентября 2019

Возможно, есть маршрут через ваш код, когда $export не установлен (если он не соответствует ни одному из key_exists() тестов).

Либо это ошибка, и она должнабыть установленным на что-то - или вы должны проверить, установлен ли он перед сохранением ...

// Check if export is needed
if ( !empty($export) )  {
    $export->save();

    $exportationFactors[] = [
        "product_id" => $export->product_id,
         "country_id" => $export->country_id,
         "fi" => $export->fi,
         "margin" => $export->margin
    ];

    if (count($exportationFactors) > 0) {
        ExportationFactor::insert($exportationFactors);
    }
}

Вы также должны убедиться, что вы сбрасываете значение каждый раз в цикле, так как оно может иметь значение, оставшееся вышеиз предыдущего цикла ...

foreach ($request->get('export_factors') as $item) {
    unset($export);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...