Cakephp3链接/按钮从不同的表中删除实体(连接数据)

时间:2016-11-29 16:14:16

标签: join jointable cakephp-3.x

我创建了一个视图,在一个视图中显示实体本身及其链接实体(与额外连接数据的多对多关系)。

到目前为止一切顺利。现在我希望每个链接的实体都有一个删除链接/按钮。这将导致连接表中的连接数据被删除。

报价有物品。所以连接表是ItemsQuotes。我在报价控制器中添加了一个方法deleteitem,并在报价的编辑视图中修改了表单链接以指向此方法。

现在我得到一个例外,即无法找到记录。我已经传递了连接行的ID,并且我正在使用TableRegistry来调用ItemsQuotes上的get($ id)。

我也尝试了其他一些东西(我的第一个想法就是立即将删除链接发送到ItemsQuotes控制器,但这似乎不起作用(需要阻止视图?)。那么&#39做交叉控制器的正确方法是什么?我在这里做错了什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

所以我找到了答案并愿意分享,因为它可能对其他人有所帮助。

这里的关键是你必须加载一个额外的模型,否则你会得到一个错误,你在布尔上使用了get()。

在此之后,您可以使用控制器中删除的一般方法:

  • 文档:http://book.cakephp.org/3.0/en/orm/deleting-data.html
  • 代码(您实际应该检查删除操作是否有效并采取相应措施:))

    public function deleteItem($ id = null) {     $ this-> request-> allowMethod([' post',' deleteitem']);     $这 - > loadModel(' ItemsQuotes&#39);     $ entity = $ this-> ItemsQuotes-> get($ id);     $ result = $ this-> ItemsQuotes-> delete($ entity);     返回$ this->重定向([' action' =>' index']); }

使用表格postLink

  • 文档:http://book.cakephp.org/3.0/en/views/helpers/form.html#creating-standalone-buttons-and-post-links
  • 代码(这不适用于表单创建和结束之间的所有postLinks - > 见下文):

    echo $ this-> Form-> postLink(__(' Delete Item'),[' action' =>' deleteitem',$ item [' _joinData'] [' id']],['确认' => __('您确定要删除该项目吗?从您的报价#{0}?',$ item [' _joinData'] [' id'])]);

起初这似乎有效,但它只适用于最后一个项目(因为表格已经在那里结束)。

文档提到了上面的错误:

  

如果要在现有表单中使用此方法,则必须使用此方法   使用块选项,以便将新表单设置为视图块   可以在主表单之外呈现。

这本食谱对此非常模糊,但这个问题很好地说明了如何在Cakephp2和cakephp3中做到这一点: How to use FormHelper::postLink() inside of a form?

echo $this->Form->postLink(
    'Delete',
    [
        'action' => 'delete',
        $attendanceid
    ],
    [
        'block' => true, // disable inline form creation
        'class' => 'btn btn-dark btn-sm col-md-4',
        'confirm' => __('Are you sure you want to delete')
    ]
);

干杯