忽略 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()
技巧。
我有一个 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()
技巧。