Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Kế thừa PHP và MySQL

Về cơ bản, bạn có ba cách tiếp cận cho vấn đề này (một trong số đó tôi sẽ loại bỏ ngay lập tức):

  1. Mỗi lớp một bàn (đây là bàn tôi sẽ loại bỏ);
  2. Một loại bản ghi với các cột tùy chọn; và
  3. Loại bản ghi có bảng con tùy thuộc vào loại mà bạn tham gia.

Để đơn giản, tôi thường khuyên bạn nên (2). Vì vậy, khi bạn đã có bảng của mình:

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

trong đó loại có thể là 'ĐẠI LÝ' hoặc 'DẪN ĐẦU' (ví dụ:). Ngoài ra, bạn có thể sử dụng một mã loại ký tự. Sau đó, bạn có thể bắt đầu điền vào chỗ trống với mô hình đối tượng:

  • Bạn có lớp cha Người dùng;
  • Bạn có hai lớp con:Trưởng nhóm và Đại lý;
  • Những đứa trẻ đó có một kiểu cố định.

và nó sẽ rơi vào vị trí khá dễ dàng.

Đối với cách tải trong một câu lệnh, tôi sẽ sử dụng một số loại nhà máy. Giả sử các lớp này:

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

một nhà máy có thể trông như thế này:

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]'");
  }
}

Ngoài ra, bạn có thể đặt phương thức gốc là một phương thức tĩnh trên lớp Người dùng và / hoặc sử dụng bảng tra cứu cho các loại cho các lớp.

Có lẽ việc gây ô nhiễm các lớp bằng tài nguyên kết quả truy vấn như vậy là một thiết kế có vấn đề theo nghĩa OO nghiêm ngặt nhất, nhưng nó đơn giản và nó hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mô hình CakePHP với Giữa các ngày

  2. Cách sử dụng nhiều cơ sở dữ liệu trong Laravel

  3. pymssql.OperationalError:Thông báo lỗi DB-Lib 20009, mức độ nghiêm trọng 9

  4. Lọc bí danh trong mysql

  5. Trích xuất chuỗi con MySQL sử dụng dấu phân cách