如何在 silverstripe 中将 arraylist 数据写入数据库

How to write arraylist data to database in 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: passed an object that is not a DBField

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

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

但是,这不是一个'good practise'。

你可以这样使用它:

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

在旁注中,您的代码指出了一些缺陷,例如没有 has_many 关系,而是一些 has_one 关系。如果您与 Customershas_many 关系,您可以调用 $dbobject1->Customers()->column('Email'); 获取电子邮件列表。

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

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