tiny ‘n’ smart
database layer

Odkazy: dibi | API reference

Oznámení

Omlouváme se, provoz fóra byl ukončen

Jakým způsobem řešit filtrování nad samotnou entitou?

před 4 lety

joe
Člen | 250
+
0
-

Ahoj,

omlouvám se možná za trochu triviální dotaz, ale rád bych si pár věcí ujasnil. Mám entitu Photo a User. Chtěl bych teď jednoduše filtrovat a vytáhnout všechny fotky na základě některého filtru, které mají restrikce ale na jinou entitu – například onen User.

Do repozitáře PhotoRepository jsem si přidal metodu getByFilter, která jako parametr přijímá objekt implementující rozhraní IPhotoFilter, abych věděl, co všechno vlastně mohu ve filtru dostat (je to ok?).

Jakým způsobem pak ale řešit join na druhou tabulku (v tomto případě tabulku uživatelů).

public function getByFilter(IPhotoFilter $filter, Query $query = null)
{
    $statement = $this->connection->select('*')->from($this->getTable());

    if($filter->userRestrict()) {
        // jde to tady nějak dynamicky doplnit?
        // ve filtru mám třeba metodu $filter->getMemberCountryId(), v tabulce user pak sloupec country_id
        $statement->leftJoin(...)->on(...);
    }

    if($query) {
        $this->processRestrictionsAndOrders($statement, $query->getRestrictions(), $query->getOrders());
    }

    return $this->createEntities($statement->fetchAll());
}

Jak dynamicky doplním o jakou tabulku jde (left join)? Jde vytáhnout i sloupce?

Jdu na vůbec správně? Jsem v tom trochu zamotaný, po době, kdy jsem dlouhou dobu na serverové straně vůbec neprogramoval.

Děkuju moc za odpovědi!

Editoval joe (28. 6. 2014 15:47)