Cakephp 3 как добавить перед поиском на столе

Я читаю документацию и, кажется, нет примера того, как использовать beforeFind в Cakephp 3. Я подумал, что, возможно, смогу сделать это так же, как я сделал это в 2, но это не сработало. Вот два способа, которыми я это сделал.

public function beforeFind(Event $event, Query $query, array $options, $primary){
        $primary = (bool) $primary;
        if(!empty($options['pure'])) {
            $query->hydrate(false)
                ->join([
                    'table' => 'main_'.$this->store_id,
                    'alias' => 'c',
                    'type' => 'LEFT',
                    'conditions' => 'c.id = Stores.MAIN_ID',
                ]);
        }
    }

Второй способ:

public function initialize(array $config) {
        if(!isset($config['store_id'])) throw new Exception('You must provide a store id');
        $this->store_id = $config['store_id'];
        $this->entityClass('P1\Model\Entity\Store');
        $this->eventManager()->attach([$this,'addMain'],'beforeFind');
    }
    public function addMain(Event $event, Query $query, array $options, $primary){
        $primary = (bool) $primary;
        if(!empty($options['pure'])) {
            $query->hydrate(false)
                ->join([
                    'table' => 'main_'.$this->store_id,
                    'alias' => 'c',
                    'type' => 'LEFT',
                    'conditions' => 'c.id = Stores.MAIN_ID',
                ]);
        }
    }

Что я делаю неправильно?


person chrisShick    schedule 10.09.2014    source источник
comment
Я не использовал 3.x, но в предыдущих версиях вам все равно нужно было возвращать то, что было передано из/в beforeFind()   -  person scrowler    schedule 11.09.2014


Ответы (1)


Вы должны использовать метод applyOptions из класса Query.

$this->Posts->find()->applyOptions(['pure'=>true])->all()
person user3560044    schedule 30.03.2015