CakePHP 3 matching

Dość częstym przypadkiem zapytania jest znajdowanie rekordów „pasujących” do konkretnych powiązanych danych. Na przykład, jeśli masz relację Articles belongsToMany Tags, prawdopodobnie będziesz chciał znaleźć artykuły, które mają określony tag, a nie będziesz chciał "selectować" danych z powiązanego modelu. W CakePHP 3 można to zrobić w następujący sposób:

// In a controller or table method.

$query = $articles->find();
$query->matching('Tags', function ($q) {
    return $q->where(['Tags.name' => 'nauka']);
});
Możemy również stosować matching dla głębszych asocjacji.
// In a controller or table method.
$country = 'Japan';
$query = $users->find()->matching(
    'Cities.Countries', function ($q) use ($country) {
        return $q->where(['Countries.name' => $country]);
    }
);