首页 > 解决方案 > 如何将arraylist数据写入silverstripe中的数据库

问题描述

$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 的对象

标签: phparraylistsilverstripe

解决方案


你不能。无法将对象写入数据库。

但是……回答你的问题。
您可以使用序列化。根据文档:Generates a storable representation of a value.

然而,这不是一个“好的做法”。

你可以像这样使用它:

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

在旁注中,您的代码表明了一些缺陷,例如没有has_many关系,而是一些has_one's。如果你想和你有has_many关系,Customers你可以打电话$dbobject1->Customers()->column('Email');来获取电子邮件列表。

更新
正如Robbie Averill所建议的,JSON 编码可能是一个更好的解决方案:

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

推荐阅读