CakePHP: Поиск товаров после того, как у нас будет идентификатор массива категорий

#php #cakephp #cakephp-3.0 #cakephp-4.x

Вопрос:

на данный момент у меня есть список продуктов, и у каждого продукта есть массив категорий (в каждом массиве есть как минимум 1 объект категории), я также создал фильтр для категорий, поэтому, когда я выбрал их в качестве флажков, а затем нажал «Отправить», я получу массив идентификаторов категорий. Но теперь я действительно не знаю, как я могу получить все ресурсы, категории которых соответствуют отфильтрованным. Мне очень жаль, если мое объяснение не очень ясное.

Вот мой код:

filter.php

 <section class="section service border-top">
    <?= $this->Form->create(null, ['novalidate' => true, 'type' => 'get']) ?>
    <fieldset>
        <?php echo $this->Form->control('categories._ids', array('multiple' => 'checkbox', 'options' => $categories));?>
    </fieldset>
    </br>
    <?= $this->Form->button(__('Filter'), ['class' =>'logbtn']) ?>
    <?= $this->Form->end() ?>
</section>
 

productsController.php

 public function customerAllProducts()
    {
        $products = $this->paginate($this->Products);

        $this->paginate = [
            'contain' => ["Categories"],
        ];

        $categories_filter = $this->request->getQuery('categories._ids');

        if(!empty($categories_filter)){
            foreach ($categories_filter as $category_filter){
                echo $category_filter; // Print out all filtered categories' IDs
            }
        }


        $categries = $this->Productss->Categoriess->find('list', ['limit' => 200]);
        $this->set(compact('products','categories'));
    }
 

Спасибо

Комментарии:

1. Вы ищете способ прочитать все товары, соответствующие выбранным категориям ?

2. Да, это так, я все еще борюсь с этим

3. Вы пробовали matching функцию по ссылке? Можете ли вы обновить свой вопрос, чтобы показать, что вы пробовали в этом направлении, и что в этом не работает? Например, вы получаете сообщение об ошибке, неправильные результаты, просто не знаете, как получить доступ к тем результатам, которые вы получаете?

4. вот что я изменил для if(!empty($categories_filter)) заявления:

5. «Категории», а не «Категории»? Это странно. Но так $categories_filter как это массив, вам нужно использовать $q->where(['Categoriess.id IN' => $categories_filter]);