Как записать данные arraylist в базу данных в silverstripe - PullRequest
0 голосов
/ 25 сентября 2018
$arraylist1 = new ArrayList();
foreach ($orders as $order){
    $email1= $order->cus1()->Email;
    $email2= $order->cus2()->Email;
    $email3= $order->cus3()->Email;
    $arraylist1->push($email1);
    $arraylist1->push($email2);
    $arraylist1->push($email3);
}
debug::show($arraylist1);
$dbobject1->Emails = $arraylist1;
$dbobject1->write();

$arraylist1 распечатать соответствующие электронные письма в браузере.И я хочу поместить эти данные в базу данных.Выше кода приведена ошибка, подобная

DataObject :: setField: передан объект, который не является DBField

1 Ответ

0 голосов
/ 25 сентября 2018

Вы не можете.Невозможно записать объекты в базу данных.

Но ... чтобы ответить на ваш вопрос.
Вы можете использовать serialize .Согласно документации: Generates a storable representation of a value.

Однако, это не «хорошая практика».

Вы можете использовать его следующим образом:

//store
$dbobject1->Emails = serialize($arraylist1);
//retrieve
$emails = unserialize($dbobject1->Emails);

В коде sidenote ваш код указывает на несколько недостатков, например, не имеет отношения has_many, а вместо нескольких has_one.,Если бы у вас была has_many связь с Customers, вы могли бы позвонить $dbobject1->Customers()->column('Email');, чтобы получить список электронных писем.

ОБНОВЛЕНИЕ
As Робби Аверилл предполагает, что JSON-кодирование может быть лучшим решением:

//store
$dbobject1->Emails = json_encode($arraylist1->toNestedArray());
//retrieve
$emails = json_decode($dbobject1->Emails);
...