这是我的情况,我有3张桌子:学生 | 附件 | 学生 _attachment_ 链路
学生表通过与链接表的classRef关系链接到附件表,就像Student表的Attachment表一样。
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-&gt; Product = $ this-&gt; 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');
这项工作非常适合大部分编辑,我仍然需要使用它,但我无法添加或删除学生表格中的附件,当然所需的结果是能够完全控制来自学生表单的附件,即添加/删除/更新附件。
此外,欢迎任何有关更好方法的建议,即我的学生表格中是否只有一个“添加附件”链接,将我带到附件/新页面,但如果我这样做,我该如何通过它是当前的学生,所以选项可以自动化...我有很多东西需要学习这个框架: - /
答案 0 :(得分:0)
我认为如果你为你的关系使用正确的命名,你会很快理解这个问题:
relations:
Students:
refClass: StudentAttachmentLink
local: attachment_id
foreign: student_id
relations:
Attachments:
refClass: StudentAttachmentLink
local: student_id
foreign: attachment_id
标记“s”'。这是一对多关系。您使用的示例是一对多的关系。
答案 1 :(得分:0)
与上一个答案一样,你不能嵌入一个有多对多关系的表格,也许你需要将关系改为多对一,因为我不认为一个附件属于很多学生,但如果是例如,你不能像symfony文档示例那样在学生中嵌入附件,但你可以遵循:
如果您更改了关系,您可以使用本教程,其中包含jquery函数,用于将一个表单或一个表单的一部分嵌入到另一个表单中
http://tech.cibul.net/embedded-forms-with-symfony-1-4-and-jquery/