【发布时间】:2010-11-05 20:50:22
【问题描述】:
这是我的情况,我有 3 张桌子:学生 | 附件 | 学生_attachment_链接
学生表通过与链接表的 classRef 关系链接到附件表,就像附件表到学生表一样。
relations:
Students:
class: Student
refClass: StudentAttachmentLink
local: attachment_id
foreign: student_id
relations:
Attachments:
class: Attachment
refClass: StudentAttachmentLink
local: student_id
foreign: attachment_id
所以需要将附件表单嵌入到学生表单中,这样在编辑学生时我可以选择上传新文件(附件)
我浏览了文档,里面有一个很棒的例子Here
在本例中,他们设置了一个子表单,然后通过将当前对象设置为正在设置的新对象,将表单绑定在一起,如下所示:
public function configure()
{
$subForm = new sfForm();
for ($i = 0; $i < 2; $i++)
{
$productPhoto = new ProductPhoto();
$productPhoto->Product = $this->getObject();
$form = new ProductPhotoForm($productPhoto);
$subForm->embedForm($i, $form);
}
$this->embedForm('newPhotos', $subForm);
}
您可以在此示例中看到 $productPhoto->Product = $this->getObject();
建立要维护的关系
现在我知道的秘密是,这是一个多对一的关系,但是我有一个多对多的关系,所以我执行以下操作:
public function configure()
{
$attachment = new Attachment();
$attachment->Student = $this->getObject();
$form = new AttachmentForm($attachment);
$this->embedForm('newFile',$form);
}
这会产生一个错误: 无法调用 Doctrine_Core::set(),在设置多对多引用时,第二个参数应该是 Doctrine_Collection 的实例。
我很困惑,因为我认为我的对象是一个 Doctrine_Collection,非常感谢任何帮助!
更新:
也许我在问错误的问题或解决仅部分相关的单点故障。我想要做的是能够从学生表单中添加/删除附件并将其与该学生相关,而无需自定义 formAction 和 save() 操作。我发现使用 Symfony 1.4 我可以使用:
$this->embedRelation('Attachments');
这项工作对于编辑来说非常棒学生表格中的附件,即添加/删除/更新附件。
也欢迎任何关于更好的方法的建议,即我是否应该在我的学生表格中有一个“添加附件”链接,将我带到附件/新页面,但如果我这样做,我该如何通过它是当前的学生,因此该选项可以自动化...我有很多要学习的框架:-/
【问题讨论】:
-
您可以编辑您的帖子,不是吗?如果没有,我会为你做的。现在,正如我告诉您的那样,您使用的示例是一对多关系。您的表单是关于单个学生对象的,并且您正在尝试设置一个集合。它不能工作。
标签: forms symfony1 doctrine embed