使用Laravel从jQuery DataTables将行数据键插入数据库

时间:2015-06-11 16:19:20

标签: php jquery laravel datatable laravel-5

我有一个Laravel应用程序,我想在数据库中插入一些记录。在数据库模型中,我有2个表。一个包含常规信息,另一个包含每个月第一个表中每个记录的值。 jQuery DataTable列出了表1中所有记录的名称。它还有3个输入字段可插入到另一个表中。问题是我无法直接从DataTable中弄清楚如何从第一个数据库表中获取记录的ID。

The DataTable

这是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。

1 个答案:

答案 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/>';
      }
   }

它会正常工作。