Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara menggunakan pemetaan data dengan kueri sql

Ada banyak cara untuk mendekati ini, ini adalah salah satunya. Katakanlah Anda memiliki skema db yang mirip dengan ini:

Sekarang Anda dapat meminta AlbumMapper dan ArtistMapper bertanggung jawab untuk mengambil objek tersebut dari db untuk Anda:

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);
}

Saya telah menempatkan bahwa AlbumMapper membutuhkan ArtistMapper sehingga dengan ini Album mapper selalu dikembalikan dengan artis mereka. Sekarang contoh implementasinya bisa seperti ini di mana saya menggunakan sedikit trik pengindeksan untuk melampirkan artis ke album:

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;
    }

}

Dalam hal ini Album Anda akan berada di sepanjang baris:

class Album {

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

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

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

}

Di akhir semua ini, Anda harus memiliki koleksi objek Album yang diinisialisasi dengan Artisnya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Memotong hasil saat menggunakan Group_Concat dan Concat

  2. Sintaks SQL TRUNCATE – Didaftarkan oleh DBMS

  3. Susun ulang / atur ulang kunci utama kenaikan otomatis

  4. Cara mengurutkan item kemudian mengurutkan lagi dengan kondisi lain menggunakan SQL

  5. Mengambil id yang terakhir dimasukkan untuk beberapa baris