【问题标题】:Cakephp3 link/button that deletes entity from different table (join data)从不同表中删除实体的 Cakephp3 链接/按钮(连接数据)
【发布时间】:2023-04-09 21:13:01
【问题描述】:

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

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

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

现在我得到一个异常,找不到记录。我已经传递了连接行的 id,并且我正在使用 TableRegistry 在 ItemsQuotes 上调用 get($id)。

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

提前致谢。

【问题讨论】:

    标签: join jointable cakephp-3.x


    【解决方案1】:

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

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

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

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

      公共函数 deleteItem($id = null) { $this->request->allowMethod(['post', 'deleteitem']); $this->loadModel('ItemsQuotes'); $entity = $this->ItemsQuotes->get($id); $result = $this->ItemsQuotes->delete($entity); 返回 $this->redirect(['action' => 'index']); }

    并使用表单 postLink

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

    文档在上面提到了我的错误:

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

    食谱对此非常模糊,但这个 SO 问题很好地说明了如何在 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')
        ]
    );
    

    干杯

    【讨论】:

    • 不知道为什么样式不适用于代码,而我确实使用了代码行前面的 4 个空格。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    相关资源
    最近更新 更多