忽略 jquery 插件数据表中的空行 post 对数据库的操作 laravel 5

ignoring jquery plugin datatables empty rows on post action to database with laravel 5

我有一个 laravel 5 应用程序,其中包含 jQuery 数据 table,每个 table 行有 3 个输入。当我 post 将它们插入数据库时​​,我想检查每行中至少有 2 个输入在插入之前已填写。如果至少有两行未填写,我想跳过该行并移至下一行,直到它到达 table.

的末尾

我的控制器是这样的:

$total_date    = array_diff($request->get('month'), array(''));
$total_comment = array_diff($request->get('comment'), array(''));
$total_value   = array_diff($request->get('value'), array(''));

for($i = 0; $i < count($total_date); $i++)
{
    if(array_diff($request->get('month'), array('')))
    {
        $dateString = $total_date[$i];
        $date       = explode('-', $dateString);
        $year       = $date[0];
        $month      = $date[1];

        $reports[] = Reports::create([
            'month'   => $month,
            'year'    => $year,
            'value'   => $total_value[$i],
            'comment' => $total_comment[$i]
        ]);
    }
}

return $reports;

如果空行位于 table 的底部,此方法工作正常,但如果我在 2 个填充行之间留下一个空行,则会失败。感谢任何帮助。

我认为你把事情复杂化了。使用过滤数组然后增量遍历数组的组合是行不通的。如果任何条目被过滤掉,您的 for 循环将不会到达数组的末尾。

退一步简化一下:

// assumes the request variables are arrays
$months = $request->get('month');
$comments = $request->get('comment');
$values = $request->get('value');

// initialize return array
$reports = [];

// assumes arrays have same number of entries
foreach($months as $key => $month) {
    $comment = $comments[$key];
    $value = $value[$key];

    // determine number of filled inputs
    $numFilled = !empty($month) + !empty($comment) + !empty($value);

    // if at least two inputs filled
    if ($numFilled >= 2) {
        $date = explode('-', $month);
        $year = isset($date[0]) ? $date[0] : '';
        $month = isset($date[1]) ? $date[1] : '';
        $reports[] = Reports::create([
            'month' => $month,
            'year' => $year,
            'value' => $value,
            'comment' => $comment
        ]);
    }
}

return $reports;

此外,作为一个完整的旁注,array_filter() 函数应该用于过滤数组,而不是 array_diff() 技巧。