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

Warisan PHP dan MySQL

Anda pada dasarnya memiliki tiga pendekatan untuk masalah ini (salah satunya akan segera saya hilangkan):

  1. Satu meja per kelas (ini yang akan saya hilangkan);
  2. Jenis rekaman dengan kolom opsional; dan
  3. Jenis record dengan tabel turunan bergantung pada tipe tempat Anda bergabung.

Untuk kesederhanaan saya biasanya merekomendasikan (2). Jadi setelah Anda mendapatkan meja Anda:

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  type VARCHAR(10),
  name VARCHAR(100)
);

di mana jenisnya dapat berupa 'AGENT' atau 'LEAD' (misalnya). Atau Anda dapat menggunakan satu kode tipe karakter. Anda kemudian dapat mulai mengisi bagian yang kosong dengan model objek:

  • Anda memiliki kelas induk Pengguna;
  • Anda memiliki dua kelas anak:Pemimpin dan Agen;
  • Anak-anak itu memiliki tipe yang tetap.

dan itu harus jatuh ke tempatnya dengan mudah.

Adapun cara memuat dalam satu pernyataan, saya akan menggunakan semacam pabrik. Dengan asumsi kelas barebone ini:

class User {
  private $name;
  private $type;
  protected __construct($query) {
    $this->type = $query['type'];
    $this->name = $query['name'];
  }
  ...
}

class Agent {
  private $agency;
  public __construct($query) {
    parent::constructor($query);
    $this->agency = $query['agency'];
  }
  ...
}

class Lead {
  public __consruct($query) {
    parent::constructor($query);
  }
  ...
}

sebuah pabrik dapat terlihat seperti ini:

public function loadUserById($id) {
  $id = mysql_real_escape_string($id);  // just in case
  $sql = "SELECT * FROM user WHERE id = $id";
  $query = mysql_query($sql);
  if (!query) {
    die("Error executing $sql - " . mysql_error());
  }
  if ($query['type'] == 'AGENT') {
    return new Agent($query);
  } else if ($query['type'] == 'LEAD') {
    return new Lead($query);
  } else {
    die("Unknown user type '$query[type]'");
  }
}

Sebagai alternatif, Anda dapat membuat metode pabrik menjadi metode statis pada, katakanlah, kelas Pengguna dan/atau menggunakan tabel pencarian untuk tipe ke kelas.

Mungkin mengotori kelas dengan sumber daya hasil kueri seperti itu adalah desain yang dipertanyakan dalam pengertian OO yang paling ketat, tetapi sederhana dan berhasil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyimpan Nomor Kartu Kredit di SESI - cara mengatasinya?

  2. Database MySQL Saya Rusak... Apa yang Harus Saya Lakukan Sekarang?

  3. Dapatkan daftar tanggal di antara dua tanggal

  4. Spring boot JPA:Gunakan perpustakaan untuk memuat data secara massal untuk MySQL

  5. Apakah ada perintah MySQL untuk mengimplementasikan sesuatu seperti tabel drop kecuali t1,b2?