php - 如何将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 的对象
解决方案
你不能。无法将对象写入数据库。
但是……回答你的问题。
您可以使用序列化。根据文档: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);
推荐阅读
- java - 我是否应该避免在 servlet 中使用过滤器来检查用户是否已登录
- node.js - 创建新的 Angular 7 项目时的问题
- android - Icon font vs SVG,哪一个更适合与flutter一起使用?
- javascript - 如何在从 javascript 创建的文本框之间制作 1. 空格 2. 将它们与来自 jsp 的另一个文本框对齐
- sql - 如何在字符串中查找匹配模式的每种情况并作为行返回
- ios - 使用 Alpha 颜色绘制金属三角形时颜色不正确。如 (0.9,0.6,0,0.4)
- python - 如何尽快找到元素,不要等待硒页面加载
- dart - 使用 Flutter 导航和路由时如何保持 BottomNavigationBar
- javascript - 有没有办法在同一个视频中分别播放音频和视频
- git - git checkout 说文件没有提交,但它们是吗?