Laravel背包-上传CSV并以JSON格式存储在数据库中

时间:2019-05-15 14:07:30

标签: laravel csv import backpack-for-laravel

我已经成功为Laravel配置了Backpack,以处理我的应用程序中除一个特定领域之外的所有CRUD操作。我需要导入CSV,将其转换为JSON,然后将JSON存储在数据库中,以便以后显示为HTML表。

我在Backpack中创建了一个自定义字段,实际上确实创建了一个用于上传文件的字段,但是我不知道如何将其指向自定义方法来处理逻辑以处理文件的转换和存储CSV。

我已经整理了文档,但没有看到类似的内容。 https://backpackforlaravel.com/docs/3.4/crud-fields#creating-a-custom-field-type

//Placed in the Controller CrudPanel Configuration
$this->crud->addField([
  // CSV to JSON
  'label' => "Specs Table",
  'name' => "specifications_table",
  'type' => 'csv2json', //custom field name
], 'update/create/both');

//Placed in csv2json.blade.php file
<div @include('crud::inc.field_wrapper_attributes') >
  <label>{!! $field['label'] !!}</label>
  <input
      type="file"
      name="{{ $field['name'] }}"
      value="{{ old($field['name']) ? old($field['name']) : (isset($field['value'])     ? $field['value'] : (isset($field['default']) ? $field['default'] : '' )) }}    "
      @include('crud::inc.field_attributes')
  >

  {{-- HINT --}}
     @if (isset($field['hint']))
        <p class="help-block">{!! $field['hint'] !!}</p>
     @endif
</div>

1 个答案:

答案 0 :(得分:0)

如果您需要用于自定义字段类型的额外逻辑,那么在模型内部作为特定模型属性的访问器总是一个好主意(imho)。

image字段类型为例:它要求您有一个setImageAttribute()访问器,实际的上传和存储都在此完成。

您可以在模型上添加新方法:

public function setSpecificationsTableAttribute($value) {
  // read $value
  // convert it to JSON
  // $this->attributes['specifications_table'] = $fileConvertedToJson;
}

希望有帮助。