Проблема Octobercms с импортом / экспортом .csv на полях повторителя - PullRequest
0 голосов
/ 29 марта 2019

У меня есть таблица и модель customer , использующие некоторые поля ретранслятора для телефонов , почты и адреса,

Я использую поведение Import Export.

Я получаю ошибку " Массив в строку ", если я не использую json_encode для экспорта данных:

namespace MyCompany\MyPlugin\Models;

use Model;
use Backend\Models\ExportModel;
use MyCompany\MyPlugin\Models\Customer;

class ExportCustomer extends \Backend\Models\ExportModel {

public function exportData($columns, $sessionKey = null) {
    $customers = Customer::all();

    $customers->each(function($customer) use ($columns) {
        foreach ($columns as $column) {
            if (is_array($customer->$column)) {
                $customer->$column = json_encode($customer->$column);
            }
            $customer->addVisible($column);
        }
    });

    return $customers->toArray();
    }

}

Но, таким образом, получившийся результат. csv бесполезен для нужд моего клиента (ему нужно отредактировать его вручную перед загрузкой , чтобы заполнить серверную часть).

РЕДАКТИРОВАТЬ: цель состоит в том, чтобы иметь префиксный столбец для каждого поля повторителя, чтобы мой клиент мог легко редактировать его следующим образом («контакт» - это поле повторителя):

| id | business_name | contact_1_name | contact_1_email | contact_1_mobile | contact_2_name | contact_2_email | contact_2_mobile | contact_3_name | contact_3_email | contact_3_mobile | ...

Данные в моем столбце " contacts " действительно закодированы в json_en:

[{"name":"Eric Lucas","surname":"Riddle","role":"Manager","phone":"+1 (989) 305-8603","cellphone":"+1 (298) 758-1686","email":"calyqev@mailinator.com","linkedin":"mylinkedin"}]

Тем не менее, если я отредактирую его и попытаюсь импортировать с помощью модели ImportCustomers, я заполню все таблицы json_encoded экранированными данными и не смогу получить их в своем представлении. Другие поля отображаются правильно.

class ImportCustomer extends \Backend\Models\ImportModel
{
    public $rules = [];

    public function importData($results, $sessionKey = null)    {

        foreach ($results as $row => $data) {

            try {
                $customer = new Customer;
                $customer->fill($data);
                $customer->save();

                $this->logCreated();
            }
            catch (\Exception $ex) {
                $this->logError($row, $ex->getMessage());
            }

        }
    }
}

Есть идеи, как управлять полями повторителя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...