Как поставить условие в CakePHP 3.2?

Как указать условия в запросе при выборке из базы данных в 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?

Любые предложения приветствуются. Заранее спасибо.


person sradha    schedule 09.02.2016    source источник
comment
Я предлагаю вам начать с чтения документации CakePHP 3.x, прежде чем продолжить. для разработки с ним, так как многое изменилось, особенно в отношении запросов к базе данных.   -  person drmonkeyninja    schedule 09.02.2016


Ответы (2)


Пожалуйста, прочитайте документы 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]);
person JazzCat    schedule 09.02.2016

используйте этот код в контроллере

$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>
person manish kumar    schedule 30.05.2016