2012-03-08 17 views
0

PHPとMySQLでaccross複数のデータベーステーブルとオブジェクトを結合します表は、私は4クラス、自分のデータベーステーブルと各持って

  • をGlobalObject
  • 画像
  • プロジェクト
  • ページ

GlobalObjectには3つのプロパティがあります

  • は、それらはすべて、しかし、次のしている、added_by
  • datetime_added

画像、プロジェクトとページが様々な分野を持っている

  • global_object_id:

    • ID
    • global_object_id(外部キー)

    現時点では、私のクラス構造には、GlobalObjectクラスのサブクラスとしてImages、ProjectsおよびPageがあります。これにより、3つのサブクラスがdatetime_addedなどの変数にアクセスできます。

    PHPとMySQL?現時点では、global_objectテーブル内のフィールドを含むすべてのフィールドが、各セクションのテーブルにあります(global_object_idは新しいテーブルなしでは存在できません - なぜこれが必要なのでしょうか?)ので、Imageからデータを要求しますたとえば、親クラスのすべてのプロパティを含み、parent :: set_by_row($ database_args)、および$ this-> set_by_row($ database_args)を使用して設定されたテーブル。

    class Image extends GlobalObject 
    { 
    $id; 
    $title; 
    
    function set_by_id($id) 
    { 
    // Select Q from Image table 
    $this->set_by_row($db_result); 
    } 
    
    function set_by_row($args) 
    { 
    parent::set_by_row($args); 
    // Set class properties 
    } 
    
    } 
    

    は繰り返しになる:私は次の操作を行うことができるようにしたい:私は(例として使用したイメージ)は、次の操作を行う時点では

    $image = new Image() 
    $image->set_by_global_object_id(23); 
    

    とイメージすること親クラスのすべてを含むセット(別のテーブルに格納されています)

    不明な点があるかどうかを尋ねてください。

  • +0

    私はあなたが立ち往生している場所がわからないんだけど。 Doctrineのようなオブジェクトリレーショナルマッピングライブラリを使用していますか?またはあなた自身を造ろうとしていますか?おそらく、このリンクは役立ちます:[SO - 良いPHP ORMライブラリ?](http:// stackoverflow。com/questions/108699/good-php-orm-library) – bfavaretto

    +0

    私のすべてです。基本的には、サブクラスとは異なるテーブルによって親クラスを設定したいが、サブクラスを設定した後はすべてのプロパティを使用できるようにする。 – Alex

    +0

    さて、どこに具体的に助けが必要ですか? MySQLクエリを作成するには?あなたのクラスメソッドを作成するには?どちらも?両方の場合には、あなたの質問は、stackoverflowのための広いかもしれない...そして/またはあなたはこれのためにサードパーティのライブラリを使用する必要があります。 – bfavaretto

    答えて

    0

    非常に便利な方法は、__getや__setのような "マジックメソッド"によって提供されます。次の例では、データへの読み取り専用アクセスを提供していますが、__setメソッドで簡単に拡張できます。

    abstract class GlobalObject { 
        protected $_data = array(); 
    
        /* Magic Method: Enable read access via $this->name */ 
        public function __get($key) { 
         if (isset($this->_data[$key])) { 
          return $this->_data[$key]; 
         } 
         throw new Exception('Property "'. $key .'" not found.'); 
        } 
    
        protected function _setFromArray(array $data) { 
         // .. do whatever needs to be done with the data .. 
    
         $this->_data = $data; 
        } 
    } 
    

    は今だけ、このクラスを拡張:

    class Image extends GlobalObject { 
        public function setByGlobalId($id) { 
         $result = mysql_query('SELECT i.*, g.* FROM images AS i 
          LEFT JOIN global_objects AS g 
          ON g.global_object_id = i.global_object_id 
          WHERE i.global_object_id = '. intval($id) .' LIMIT 1'); 
    
         // @todo check if result is empty 
    
         $data = mysql_fetch_assoc($result); 
         $this->_setFromArray($data); 
        } 
    } 
    

    、簡単な例:

    $image = new Image(); 
    $image->SetByGlobalId(42); 
    echo $image->added_by;  
    
    関連する問題