Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Objektové programování v PHP - práce s DB

Nemyslel jsem si, že s tímto bych se obrátil zrovna sem, ale na djpw mi nikdo neodpovídá a osobně se nemám na koho obrátit.
Zkoušel jsem si pročíst několik zdrojů a dokumentace, ovšem nebyl jsem o moc moudřejší.

Tak k věci:
V tuto chvíli mám presenter s metodou List v této podobě

public function renderList($id = null) {
    if (!$this->user->isAllowed('AdminUsers')) {
      $this->error($this->translator->translate('messages.error.sufficientPermissions'), \Nette\Http\IResponse::S403_FORBIDDEN);
    }
    $sessionData = $this->getSession(self::SEARCH_USER_BOX_NAME);
    $users = $this->adminUserManagerModel->getUserList($sessionData->where);
    if (!$users) {
      $this->template->userList = array();
    } else {
      $vp = new \VisualPaginator\VisualPaginator($this, 'usersPaginator');
      $paginator = $vp->getPaginator();
      $paginator->itemsPerPage = $this->systemInformation->number_posts_admin_view;
      $paginator->itemCount = count($users);
      $this->template->userList = $users->fetchAll($paginator->offset, $paginator->itemsPerPage);
    }
  }

a následně getUserList obsahuje toto

public function getUserList($where = array()) {
    $result = array();
    $sql = array();
    $sql[] = 'SELECT
              ' . self::COLUMN_ID . ',
              ' . self::COLUMN_ROLE . ',
              ' . self::COLUMN_EMAIL . ',
              ' . self::COLUMN_USERNAME . ',
              ' . self::COLUMN_SURNAME . ',
              ' . self::COLUMN_FIRST_NAME . ',
              ' . self::COLUMN_ACTIVATED . ',
              ' . self::COLUMN_REGISTERED_AT . ',
              ' . self::COLUMN_LOGGED_AT . ',
              ' . self::COLUMN_EMAIL_ENABLE . ',
              ' . self::COLUMN_MIDDLE_NAME . ',
              ' . self::COLUMN_PHONE . ',
              ' . self::COLUMN_WEB . ',
              ' . self::COLUMN_YOUTUBE . ',
              ' . self::COLUMN_GOOGLE . ',
              ' . self::COLUMN_FACEBOOK . ',
              ' . self::COLUMN_SKYPE . ',
              ' . self::COLUMN_IRC . ',
              ' . self::COLUMN_AVATAR . '
             FROM security_users WHERE 1=1';
    if (count($where) > 0) {
      if (isset($where['role'])) {
        $sql[] = ' AND (';
        $tmp = array();
        $i = 1;
        foreach ($where['role'] as $role) {
          $sql[] = ($i > 1 ? ' OR ' : null) . 'role = %s ';
          $sql[] = $role;
          ++$i;
        }
        $sql[] = ')';
      }
      foreach ($where as $key => $value) {
        if ($key == self::COLUMN_EMAIL || $key == self::COLUMN_USERNAME) {
          $sql[] = ' AND ' . $key . ' LIKE %~like~';
          $sql[] = $value;
        }
      }
    }
    return $this->database->query($sql);
  }

Ovšem toto mi nepříjde jako nejlepší návrh. Jak řešit toto filtrování? (využívám dibi)
Znám jen lidi co programují v C apod.. Bylo mi doporučeno si napsat nějaký interface apod. Ovšem zde je asi největší kámen úrazu. OOP osobně neovládám na nejlepší úrovni, ale již nějakou třídu co má hlavu a patu dokážu sepsat.

Pokud bychom tu došli k závěru (ale i kdyby ne), poradil by mi někdo jak na to?
Zkusil jsem to nějak následovně, ale opět nevím moc jak dál (zas budu vděčnej už jen za nakopnutí)

<?php

interface IArticle {
    public function find($id);

    public function create($data);

    public function delete($id);

    public function edit($id,$data);

    public function findAll();
}

class Story implements IArticle {

    public function find($id){
        return $this->database->query('SELECT * FROM story WHERE id = %i',$id)->fetch();
    }

    public function create($data){

    }

    public function delete($id){
        return $this->database->delete('story')->where(array('id=%i'=>$id));
    }

    public function edit($id,$data){

    }

    public function findAll(){
        return $this->database->query('SELECT * FROM story');
    }
}

Děkuji za jakoukoliv radu(nakopnutí) ke správnému návrhu

Předmět Autor Datum
phpdao.com
wam_Spider007 14.04.2014 18:50
wam_Spider007
Děkuji, trochu mne to snad navedlo správnou cestou :) Jen ale jedna věc tu zůstava nevysvětlena. Jak…
tomas.kulhanek 14.04.2014 22:06
tomas.kulhanek
samotny fulltext ma podporu v mysql. toto by mohlo pomoct sa trochu odrazit http://devzone.zend.com/…
wam_Spider007 14.04.2014 22:37
wam_Spider007
Blbě jsem se vyjádřil. Myslel jsem vyhledávání něco jako [http://tirus.eu/Attachment/view/4274493ce7…
tomas.kulhanek 15.04.2014 00:19
tomas.kulhanek
treba si pozriet v dokumentacii DAO ako si doplnit vlastne funkcie, trebars aj pre vyhladavanie. Nem…
wam_Spider007 15.04.2014 13:58
wam_Spider007
Blbě se chápem :) Podívej na hlavní post vlákna. Já to defakto chápu jak udělat rozšíření DAO, ale… poslední
tomas.kulhanek 15.04.2014 20:59
tomas.kulhanek

Zpět do poradny Odpovědět na původní otázku Nahoru