Zend Framework Data Mappers и отношения? - PullRequest
1 голос
/ 23 января 2011

Как использовать отношения с картографами данных?В примере быстрого запуска не хватает небольшой информации о том, как бы я работал с картографом данных, если я работаю с реляционными данными. Например,

(таблица) Пользователь (таблица) Статьи (таблица) Теги

Пользователь -one_to_many- Статьи -many_to_many- Теги

Если я получу одного пользователя через маппер данных, что будет лучшим способом получить соответствующие статьи и теги?Должны ли они быть определены в модели тоже?Любой пример или лучшая практика?

1 Ответ

1 голос
/ 25 января 2011

Если у вас есть класс для каждого из этих «Article», «User» и «Tag», то вы, безусловно, можете добавить дополнительные методы к своим классам.Например, у вас может быть:


class Article {
  public function getTags() {
    // Talk to your DAO object or table data gateway or whatever
    // and instantiate them and return an array of Tag objects 
  }
}

class User {
  public function getArticles() { }
}

Или вы можете реализовать их в классах статического шлюза, таких как:


class Article_Gateway {
  public static function fetchByTag( $tagName ) { }

  public static function fetchByUser( $userName ) { }
}

Что касается того, как фактически получить строки данных для использования в ваших моделяхдля этого вы можете использовать функции отношений Zend_Db_Table (http://framework.zend.com/manual/en/zend.db.table.relationships.html)

например:


$accountsTable = new Accounts();
$accountsRowset = $accountsTable->find(1234);
$user1234 = $accountsRowset->current();

$bugsReportedByUser = $user1234->findDependentRowset('Bugs');
...