【问题标题】:CakePHP - Pagination Query append default condition "TableName.deleted" != 1"CakePHP - 分页查询附加默认条件“TableName.deleted”!= 1“
【发布时间】:2015-10-26 10:01:20
【问题描述】:

我正在使用 Cakephp V2.0 并且有大量的应用程序正在运行它。以下是我面临的问题。

Select Query 是自动设置的条件,如"TableName.deleted" != 1

实际上是哪个创建问题,我想在此查询中添加我的自定义条件以获取所有软删除的记录,即:"TableName.deleted" == 1

但是当我们使用$this->paginate()函数时,它会在MySQL查询条件的末尾附加默认条件,然后MySQL查询将如下所示:

("TableName.deleted" == 1) AND "TableName.deleted" != 1 Order By xyz

所以它只通过最后一个条件来检索记录集,并且只返回没有被删除的记录。

如何删除这个默认的 CakePHP 条件 ("TableName.deleted" != 1)?

已编辑(添加代码):

if (isset($this->passedArgs['showdeleted']) && $this->passedArgs['showdeleted'] == 1) {
            $displayConditions['AND']['tableName.deleted'] = "1";
        } else {
            $displayConditions['AND']['tableName.deleted'] = "0";
        }

        $this->paginate = array(
            'conditions' => $displayConditions,
            'fields' => $this->displayFields,
            'limit' => $show_page,
            'group' => 'tableName.id',
            'contain' => array(
                'tbl1',
                'tbl2',
                'tbl3',
                'tbl4',
                'tbl5',
            ),
        );

        $returnRecords = $this->paginate();

我应该怎么做才能解决这个问题?

【问题讨论】:

  • 您能否在您的问题中添加一些代码,以便我们了解您是如何构建查询的? :-)
  • How do i remove this default CakePHP condition - 这不是默认的 CakePHP 条件。你需要展示你在做什么。
  • @drmonkeyninja & AD7six :我在上面的问题中添加了示例代码。请检查。我添加了一个与此已删除字段相关的条件,它的工作原理是我在上面的问题中解释的。
  • 问题中的任何内容均不对"TableName.deleted" != 1负责。我将首先查看您正在使用的行为,然后(多么令人惊讶)删除/禁用您可能正在使用的软删除行为,如果您想显示已删除的记录。
  • SO 读者的职责不是猜测您在哪里放置/添加了执行您使用的工具不会自动发生的事情的代码。请做一些调试/工作,或者只是想你的问题。

标签: php mysql cakephp pagination


【解决方案1】:

感谢您的建议和 cmets。

实际上我得到了同样的答案。我们为相同的行为创建了行为

SoftDeletableBehavior.php

我们在其中定义了附加条件 "TableName.deleted" != 1 的相关方法。并且在 Model 中也提到过,如下所示:

var $actsAs = array(
        'SoftDeletable' => array(
            'field' => 'deleted',
            'find' => true
        ),

    );

所以我只做了一个很小的改变,它正在工作。

var $actsAs = array(
            'SoftDeletable' => array(
                'field' => 'deleted',
                'find' => false
            ),

        );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2021-11-16
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多