【问题标题】:How to put condition in CakePHP 3.2?如何在 CakePHP 3.2 中设置条件?
【发布时间】:2016-05-30 22:04:46
【问题描述】:

如何在 CakePHP 3.2 中从数据库中获取条件时将条件放入查询中。 这里我实现了一个分页,很容易通过 WHERE 条件(见下面的代码)。

public $paginate = [
        'fields' => ['Users.id', 'Users.email', 'Users.name', 'Users.is_active'],
        'limit' => 1,
        'conditions'=>['Users.is_active' =>1],
        'order' => [
            'Users.id' => 'asc'
        ]
    ];

public function index() {
        $users = $this->paginate($this->Users);
        $this->set(compact('users'));
    }

在上面的代码中我使用了分页,所以我很容易传递条件和其他东西,比如字段、顺序等。

如果分页不存在,那么代码是什么?这里我只需要从数据库中获取数据,然后给出条件和其他东西。 在 CakePHP 2.6 中,代码如下所示。

  $this->EventCategory->find('all', array('conditions' => array('EventCategory.is_active' => 1), 'fields' => array('EventCategory.id', 'EventCategory.name')));

在 CakePHP 3.2 中有没有其他方法可以像上面那样(没有分页)?

欢迎提出任何建议。提前谢谢你。

【问题讨论】:

  • 我建议您先阅读CakePHP 3.x docs,然后再继续使用它进行开发,因为发生了很多变化,尤其是在查询数据库时。

标签: php cakephp pagination cakephp-3.0 cakephp-3.x


【解决方案1】:

请阅读文档http://book.cakephp.org/3.0/en/orm/retrieving-data-and-resultsets.html

$query = $this->EventCategory->find('all')
    ->select(['EventCategory.id', 'EventCategory.name'])
    ->where(['EventCategory.is_active' => 1]);

【讨论】:

    【解决方案2】:

    在控制器中使用此代码

    $con=[];
    $con['Users.role_id'] = 3;
    
      if (isset($this->request->query['keyword']) && !empty($this->request->query['keyword'])) {
                $keyword = trim($this->request->query['keyword']);
                $con['OR'] = ['Users.phone LIKE' => '%' . $keyword . '%', 'Users.name LIKE' => '%' . $keyword . '%', 'ContractorDetails.company_name LIKE' => '%' . $keyword . '%', 'ProjectTypes.name LIKE' => '%' . $keyword . '%'];
            }
    
     $this->paginate = [
                'sortWhitelist' => ['ContractorDetails.company_name', 'ProjectTypes.name', 'Users.name', 'Users.id', 'Users.phone', 'Users.deleted', 'Users.probationary'],
                'contain' => ['ContractorDetails.ProjectTypes'],
                'conditions' => $con,
                'order' => ['Users.id' => 'desc'],
                'limit' => (isset($this->request->query['limit'])) ? $this->request->query : 10,
            ];
            $users = $this->paginate($this->Users);
    
            $this->set(compact('users'));
    

    在 view.ctp 中使用这个

    use Cake\Core\Configure;
    use Cake\I18n\Number;
        <div class="row">
                    <div class="col-sm-6">
                        <div class="dataTables_info" id="editable_info" role="status" aria-live="polite"><?= $this->Paginator->counter(['format' => 'Showing {{start}} to {{end}} of {{count}} contractors']) ?></div>
                    </div>
                    <?php if ($this->Paginator->counter(['format' => '{{pages}}']) > 1) { ?>
                        <div class="col-sm-6">
                            <div class="dataTables_paginate paging_bootstrap" id="editable_paginate">
                                <ul class="pagination pull-right">
                                    <?= $this->Paginator->prev('Previous') ?>
                                    <?= $this->Paginator->numbers() ?>
                                    <?= $this->Paginator->next('Next') ?>
                                </ul>
                            </div>
                        </div>
                    <?php } ?>
                </div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多