Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak używać mapera danych z zapytaniami sql

Istnieje wiele sposobów podejścia do tego, to jest jeden z nich. Załóżmy, że masz schemat bazy danych podobny do tego:

Teraz możesz mieć AlbumMapper i ArtistMapper odpowiedzialne za pobieranie tych obiektów z bazy danych:

interface AlbumMapper {

    /**
     * Fetches the albums from the db based on criteria
     * @param type $albumCriteria
     * @param ArtistMapper $artistMapper
     * 
     * Note: the ArtistMapper here can be also made optional depends on your app
     */
    public function fetchBySomeCriteria($albumCriteria, ArtistMapper $artistMapper);
}

interface ArtistMapper {

    /**
     * @param array $ids
     * @return Artist[]
     */
    public function fetchByAlbumIds(array $ids);
}

Zaznaczyłem, że AlbumMapper wymaga ArtistMappera, więc z tym maperem albumy są zawsze zwracane wraz z wykonawcami. Teraz przykładowa implementacja może wyglądać tak, w której używam małej sztuczki z indeksowaniem, aby dołączyć wykonawcę do albumu:

class ConcreteAlbumMapper implements AlbumMapper {

    public function fetchBySomeCriteria($albumCriteria, ArtistMapper $artistMapper) {
        //sql for fetching rows from album table based on album criteria

        $albums = array();

        foreach ($albumRows as $albumRow) {
            $albums[$albumRow['id']] = new Album($albumRow);
        }

        $artists = $artistMapper->fetchByAlbumIds(array_keys($albums));

        //marrying album and artists
        foreach ($artists as $artist) {
            /**
             * not crazy about the getAlbumId() part, would be better to say
             * $artist->attachYourselfToAnAlbumFromThisIndexedCollection($albums);
             * but going with this for simplicity
             */
            $albums[$artist->getAlbumId()]->addArtist($artist);
        }

        return $albums;
    }

}

W takim przypadku Twój album będzie wyglądał następująco:

class Album {

    private $id;
    private $title;
    private $artists = array();

    public function __construct($data) {
        //initialize fields
    }

    public function addArtist(Artist $artist) {
        $this->artists[] = $artist;
    }

}

Na końcu tego wszystkiego powinieneś mieć kolekcję obiektów albumu zainicjalizowaną z ich wykonawcami.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wyświetlić dane z mysql za pomocą angular.js PHP?

  2. mysql aktualizuje kolumnę o int na podstawie zamówienia

  3. Jak napisać zapytanie SQL z dynamicznym LIMIT

  4. Nie można połączyć się z bazą danych mysql za pomocą play-slick 1.0.1/slick 3.0:błąd konfiguracji

  5. Twórz procedury składowane za pomocą PDO w PHP