我有一个Laravel应用程序,我想在数据库中插入一些记录。在数据库模型中,我有2个表。一个包含常规信息,另一个包含每个月第一个表中每个记录的值。 jQuery DataTable列出了表1中所有记录的名称。它还有3个输入字段可插入到另一个表中。问题是我无法直接从DataTable中弄清楚如何从第一个数据库表中获取记录的ID。
这是jQuery DataTable的代码:
{ data: 'value_code', name: 'value_code' },
{ data: 'id', name: 'id'},
{ data: 'value_workload', name: 'value_workload' },
{
className: '',
orderable: false,
data: function (row, type, val, meta) {
return '<input name="month[]" data-name"month-' + meta.row + '" class="form-control month" type="month" />'
}
},
{
className: '',
orderable: false,
data: function (row, type, val, meta) {
return '<input name="value[]" data-name"value-' + meta.row + '" class="form-control" type="number" />'
}
},
{
className: '',
orderable: false,
data: function (row, type, val, meta) {
return '<input name="comment[]" data-name"comment-' + meta.row + '" class="form-control" type="text" />'
}
},
在我的模特中有:
public function values(){
return $this->belongsTo('App\Values');
}
在Reports.php
模型和Values.php
public function reports(){
return $this->hasMany('App\Reports');
}
在ReportsController.php
我有:
public function store(Request $request, Value $value)
{
$months = $request->get('month');
$comments = $request->get('comment');
$values = $request->get('value');
$id = $request->get('id');
$workload = $request->get('value_workload');
// initialize return array
$reports = [];
// assumes arrays have same number of entries
foreach($months as $key => $month) {
$comment = $comments[$key];
$value = $values[$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[] = $value->reports()->create([
'value_id' => $id,
'value_workload' => $workload,
'month' => $month,
'year' => $year,
'value' => $value,
'comment' => $comment
]);
}
}
return $reports; // this is what has been input! YAY!
}
正如我所说,问题在于将来自2个数据库表的记录与外键相关联。无论我尝试什么,我都无法得到它。 所有的帮助或提示都表示赞赏。
修改
这样做的一种方法是将这些行详细信息添加到输入字段中,但我不知道(尝试过和失败过)如何使用jQuery DataTables。
答案 0 :(得分:0)
我找到了一个解决方案,我将其发布在此处,以便遇到同样问题的其他任何人都可以找到它。
在jQuery DataTable初始化代码之后:
columns:[
{ data: 'value_code', name: 'value_code' },
{ data: 'id', name: 'id'},
{ data: 'value_workload', name: 'value_workload' },
{
className: '',
orderable: false,
data: function (row, type, val, meta) {
return '<input name="month[]" data-name"month-' + meta.row + '" class="form-control month" type="month" />'
}
},
{
className: '',
orderable: false,
data: function (row, type, val, meta) {
return '<input name="value[]" data-name"value-' + meta.row + '" class="form-control" type="number" />'
}
},
{
className: '',
orderable: false,
data: function (row, type, val, meta) {
return '<input name="comment[]" data-name"comment-' + meta.row + '" class="form-control" type="text" />'
}
}]
添加以下内容
"columnDefs": [ {
"targets": [1],
"render": function ( data, type, full, meta ) {
return '<input type="text" name="id[]" data-name"id-' + meta.row + '" class="inactive" value="'+data+'" disabled/>';
}
}
它会正常工作。