Finder

Wywołanie findera

public function tags(...$tags)
{
    $articles = $this->Articles->find('tagged', tags: $tags)->all();
}

Utworzenie findera

use Cake\ORM\Query\SelectQuery;

public function findTagged(SelectQuery $query, array $tags = []): SelectQuery
{
    $columns = [
        'Articles.id', 'Articles.user_id', 'Articles.title',
        'Articles.body', 'Articles.published', 'Articles.created',
        'Articles.slug',
    ];

    $query = $query
        ->select($columns)
        ->distinct($columns);

    if (empty($tags)) {
        // Artykuły bez tagów
        $query->leftJoinWith('Tags')
            ->where(['Tags.title IS' => null]);
    } else {
        // Artykuły, których tagi pasują
        $query->innerJoinWith('Tags')
            ->where(['Tags.title IN' => $tags]);
    }

    return $query->groupBy(['Articles.id']);
}