У меня есть таблица и модель 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());
}
}
}
}
Есть идеи, как управлять полями повторителя?