php – Symfony2 Propel Collection undefined offset:2
发布时间:2020-12-13 13:08:05 所属栏目:PHP教程 来源:网络整理
导读:我们使用propel和Symfony2形式创建了一个集合.我们可以毫无问题地保存表单,我们可以使用该集合添加第二个选项.如果我们然后保存然后尝试添加第3个集合,我们会收到以下错误: Notice: Undefined offset: 2 堆栈跟踪 in src/app/MyBundle/Model/om/BaseLabelsL
我们使用propel和Symfony2形式创建了一个集合.我们可以毫无问题地保存表单,我们可以使用该集合添加第二个选项.如果我们然后保存然后尝试添加第3个集合,我们会收到以下错误:
Notice: Undefined offset: 2 堆栈跟踪 in src/app/MyBundle/Model/om/BaseLabelsLabelsLinesMapsQuery.php at line 241 $cton0 = $this->getNewCriterion(LabelsLabelsLinesMapsPeer::ID,$key[0],Criteria::EQUAL); $cton1 = $this->getNewCriterion(LabelsLabelsLinesMapsPeer::LABEL_ID,$key[1],Criteria::EQUAL); $cton0->addAnd($cton1); $cton2 = $this->getNewCriterion(LabelsLabelsLinesMapsPeer::LABEL_LINES_ID,$key[2],Criteria::EQUAL); $cton0->addAnd($cton2); $this->addOr($cton0); } 我已经在下面发布了相关代码,但是由于存在大量代码.我们想知道是否有人遇到过同样的问题. 我已经使用不同的代码发送了一个错误报告,这会产生相同的错误但是我没有得到回复.错误报告是here. 这是相关架构的片段: <table name="labels_labels_lines_maps" isCrossRef="true"> <column name="id" type="integer" required="true" autoIncrement="true" primaryKey="true"/> <column name="label_id" type="integer" primaryKey="true"/> <column name="label_lines_id" type="integer" primaryKey="true"/> <foreign-key foreignTable="labels" onDelete="cascade"> <reference local="label_id" foreign="id"/> </foreign-key> <foreign-key foreignTable="labels_lines" onDelete="cascade"> <reference local="label_lines_id" foreign="id"/> </foreign-key> <vendor type="mysql"> <parameter name="Engine" value="InnoDB" /> <parameter name="Charset" value="utf8" /> </vendor> </table> <table name="labels_lines"> <column name="id" type="integer" required="true" autoIncrement="true" primaryKey="true"/> <column name="placeholder_text" type="varchar" size="150"/> <column name="font_id" type="integer"/> <column name="font_size" type="integer"/> <column name="x_axis" type="integer"/> <column name="y_axis" type="integer"/> <column name="width" type="integer"/> <column name="height" type="integer"/> <column name="colour" type="varchar" size="20"/> <column name="angle" type="integer"/> <column name="is_volume" type="boolean"/> <column name="is_percentage" type="boolean"/> <column name="is_productof" type="boolean"/> <column name="is_type" type="boolean"/> <column name="is_occasion" type="boolean"/> <foreign-key foreignTable="font" onDelete="cascade"> <reference local="font_id" foreign="id"/> </foreign-key> <vendor type="mysql"> <parameter name="Engine" value="InnoDB" /> <parameter name="Charset" value="utf8" /> </vendor> </table> <table name="occasion"> <column name="id" type="integer" required="true" autoIncrement="true" primaryKey="true"/> <column name="occasion" type="varchar" size="200"/> <vendor type="mysql"> <parameter name="Engine" value="InnoDB" /> <parameter name="Charset" value="utf8" /> </vendor> </table> <table name="font"> <column name="id" type="integer" required="true" autoIncrement="true" primaryKey="true"/> <column name="name" type="varchar" size="100"/> <column name="location" size="300"/> <vendor type="mysql"> <parameter name="Engine" value="InnoDB" /> <parameter name="Charset" value="utf8" /> </vendor> </table> 下面是视图(没有任何样式): {{ form_start(form) }} {{ form_row(form._token) }} <ul class="labelsliness list-group" data-prototype="{{ form_widget(form.labelsliness.vars.prototype)|e }}"> {% for lines in form.labelsliness %} <li>{{ form(lines) }}</li> {% endfor %} </ul> {{ form_row(form.save) }} {{ form_end(form) }} <script> var $collectionHolder; var $addLinesLink = $('<button class="add_line_link btn btn-primary">Add a line</button>'); var $newLinkLi = $('<li></li>').append($addLinesLink); $(document).ready(function(){ $collectionHolder = $('ul.labelsliness'); $collectionHolder.append($newLinkLi); $collectionHolder.data('index',$collectionHolder.find(':input').length); $addLinesLink.on('click',function(e) { e.preventDefault(); addLineForm($collectionHolder,$newLinkLi); }); }); function addLineForm($collectionHolder,$newLinkLi) { var prototype = $collectionHolder.data('prototype'); var index = $collectionHolder.data('index'); var newForm = prototype.replace('/__name__/g',index); $collectionHolder.data('index',index + 1); var $newFormLi = $('<li></li>').append(newForm); $newFormLi.append('<button class="remove-line btn btn-danger">Remove</button>'); $newLinkLi.before($newFormLi); $('.remove-line').click(function(e){ e.preventDefault(); $(this).parent().remove(); return false; }); } </script> 表格处理: public function buildForm(FormBuilderInterface $builder,array $options) { $builder ->add("labelsliness","collection",array( "type" => new LabelsLinesType(),"allow_add" => true,"allow_delete" => true,"by_reference" => false )) ->add("save","submit"); } public function configureOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'data_class' => 'AJSharpEPCBundleModelLabels',)); } public function getName() { return "label_form"; } 最后,下面是控制器. public function editAction(Request $request,$id = null) { $labels = LabelsQuery::create()->findPk($id); $form = $this->createForm(new EditLabelType(),$labels); $form->handleRequest($request); if ($form->isValid()) { $labels->save(); return $this->redirect($this->generateUrl("_admin_labels")); } return $this->render("AppLabelBundle:Admin:edit.html.twig",array("form" => $form->createView())); }
您的架构对我来说有点混乱.下面的这一位包括三个主键,其中两个作为外键,其中一个作为行的唯一标识符:
<table name="labels_labels_lines_maps" isCrossRef="true"> <column name="id" type="integer" required="true" autoIncrement="true" primaryKey="true"/> <column name="label_id" type="integer" primaryKey="true"/> <column name="label_lines_id" type="integer" primaryKey="true"/> <foreign-key foreignTable="labels" onDelete="cascade"> <reference local="label_id" foreign="id"/> </foreign-key> <foreign-key foreignTable="labels_lines" onDelete="cascade"> <reference local="label_lines_id" foreign="id"/> </foreign-key> <vendor type="mysql"> <parameter name="Engine" value="InnoDB" /> <parameter name="Charset" value="utf8" /> </vendor> </table> 我怀疑如果你选择一件事并坚持下去,你的很多麻烦都可能消失.删除id并让主复合键表示两个完全有效的外表,或者将PRIMARY KEY更改为每个外键上的UNIQUE约束,将主键保留为id.这也完全有效.最终,您的决定将基于您的设计要求. 另一个注意事项:您可能想要也可能不想做 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |