From 50eed65fdfba53e30d2de486ed75ed3c5e9a0bc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gergely=20Tam=C3=A1s?= Date: Sat, 15 Oct 2016 23:11:55 +0200 Subject: [PATCH 1/2] Added finder method --- src/Model/Behavior/TagBehavior.php | 33 ++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/Model/Behavior/TagBehavior.php b/src/Model/Behavior/TagBehavior.php index 2fe49cd..4097cbc 100644 --- a/src/Model/Behavior/TagBehavior.php +++ b/src/Model/Behavior/TagBehavior.php @@ -3,8 +3,10 @@ use ArrayObject; use Cake\Event\Event; +use Cake\Network\Request; use Cake\ORM\Behavior; use Cake\ORM\Entity; +use Cake\ORM\Query; use Cake\ORM\Table; use Cake\ORM\TableRegistry; use Cake\Utility\Inflector; @@ -21,6 +23,7 @@ class TagBehavior extends Behavior 'delimiter' => ',', 'separator' => ':', 'namespace' => null, + 'finderField' => 'tag', 'tagsAlias' => 'Tags', 'tagsAssoc' => [ 'className' => 'Muffin/Tags.Tags', @@ -37,11 +40,14 @@ class TagBehavior extends Behavior 'taggedCounter' => ['tag_count' => [ 'conditions' => [] ]], + 'implementedFinders' => [ + 'tagged' => 'findByTag' + ], 'implementedEvents' => [ - 'Model.beforeMarshal' => 'beforeMarshal', + 'Model.beforeMarshal' => 'beforeMarshal' ], 'implementedMethods' => [ - 'normalizeTags' => 'normalizeTags', + 'normalizeTags' => 'normalizeTags' ], 'fkTableField' => 'fk_table' ]; @@ -87,6 +93,29 @@ public function beforeMarshal(Event $event, ArrayObject $data, ArrayObject $opti } } + /** + * Finder method + * usage $query->find('tagged', ['{finderField}' => 'example_tag' ] ); + * + * @param Query $query + * @param array $options + */ + public function findByTag(Query $query, array $options){ + + if(!empty($options[$this->config('finderField')])){ + $query->matching($this->config('tagsAlias'), function ($q) use ($options) { + return $q->where([ + 'OR' => [ + $this->config('tagsAlias').'.slug' => $options[$this->config('finderField')], + $this->config('tagsAlias').'.label' => $options[$this->config('finderField')] + ] + ] + ); + }); + } + + } + /** * Binds all required associations if an association of the same name has * not already been configured. From ee1aec630f7701bae5d48e317b2ce1699ac346e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gergely=20Tam=C3=A1s?= Date: Sat, 15 Oct 2016 23:13:59 +0200 Subject: [PATCH 2/2] Removed unused --- src/Model/Behavior/TagBehavior.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Model/Behavior/TagBehavior.php b/src/Model/Behavior/TagBehavior.php index 4097cbc..a48320c 100644 --- a/src/Model/Behavior/TagBehavior.php +++ b/src/Model/Behavior/TagBehavior.php @@ -3,7 +3,6 @@ use ArrayObject; use Cake\Event\Event; -use Cake\Network\Request; use Cake\ORM\Behavior; use Cake\ORM\Entity; use Cake\ORM\Query;