如何在 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
关系。如果您与 Customers
有 has_many
关系,您可以调用 $dbobject1->Customers()->column('Email');
获取电子邮件列表。
更新
正如 Robbie Averill 所建议的那样,JSON 编码可能是更好的解决方案:
//store
$dbobject1->Emails = json_encode($arraylist1->toNestedArray());
//retrieve
$emails = json_decode($dbobject1->Emails);
$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
关系。如果您与 Customers
有 has_many
关系,您可以调用 $dbobject1->Customers()->column('Email');
获取电子邮件列表。
更新
正如 Robbie Averill 所建议的那样,JSON 编码可能是更好的解决方案:
//store
$dbobject1->Emails = json_encode($arraylist1->toNestedArray());
//retrieve
$emails = json_decode($dbobject1->Emails);