2012-02-03 12 views
2

役職。私はここで、モデルを構築し始めている抽象ZendのDBテーブルを使用して取得Zend_Db_Table_Abstractロード入社モデル

クラスがされています

ORM_Post

class ORM_Post extends Zend_Db_Table_Abstract { 

    protected $_name = 'Post'; 
    protected $_dependentTables = array('ORM_Post_Client'); 

} 

ORM_Client

class ORM_Client extends Zend_Db_Table_Abstract { 


    protected $_name = 'Client'; 
    protected $_dependentTables = array(
     'ORM_Post_Client' 
    ); 
} 

ORM_Post_Client

class ORM_Post_Client extends Zend_Db_Table_Abstract { 

    protected $_name = 'Post_Client'; 
    protected $_referenceMap = array(
     'post' => array(
      'columns'   => 'post_id', 
      'refTableClass'  => 'ORM_Post', 
      'refColumns'  => 'id' 
     ), 
     'client' => array(
      'columns'   => 'client_id', 
      'refTableClass'  => 'ORM_Post_Client', 
      'refColumns'  => 'id' 
     ) 

    ); 
} 

私がやりたいことは、ポストのインスタンスを呼び出して、クライアントのインスタンスを読み込んで関連するすべてのポストをロードすることに関連するクライアントをロードすることです。

だから私はこのでした:

$post = new ORM_Post(); 
    $results = $post->fetchAll(); 

    foreach ($results as $key => $result){ 
     $row = $results->current(); 
     $client = $row->findDependentRowset('ORM_Post_Client','client'); 
    } 

を、私は リファレンスルール「クライアント」私は時間のためにこれと戦ってきたと私は間違っているつもりだ場所を確認することはできませんテーブルORM_Post

を参照していない取得します。クライアントのPost_Clientジョインを宣言してモデルをポストしますか?アドバイス男性のための

$post = new ORM_Post(); 
$results = $post->fetchAll(); 
$return = array(); 

    foreach ($results as $result){ 
     $row = $post->find($result->id)->current(); 
     $return[$result->id] = $row->toArray(); 
     $return[$result->id]['clients'] = $row->findManyToManyRowset('ORM_Client', 'ORM_Post_Client')->toArray(); 
} 

return $return; 

おかげで、あなたはORM_Post_Clientに正しい軌道

答えて

3

に私を置くことが

次のようになります。ここでは

EDIT

は私が後にされたものです

'client' => array(
      'columns'   => 'client_id', 
      'refTableClass'  => 'ORM_Client', //instead of ORM_Post_Client 
      'refColumns'  => 'id' 
     ) 

refTableClass =>親テーブルのクラス名。

foreach ($results as $result){ 
     $row = $results->current(); 
     $clients = $row->findDependentRowset('ORM_Post_Client','post'); 
    } 

あなたがいることを意味し、ポストのクライアントを探していますので:また、私はあなたのループがあるべきだと思うクラス 名ではなく、SQLテーブルの物理名(documentation

を使用しますポストはあなたのrule

で提示した($row->findDependentRowset($table, [$rule]);

+0

ありがとうございます。しかし、それは問題を解決しません。私が取得: リファレンスルール「クライアント」の表を参照していないORM_Post – azz0r

+0

はたぶん私は –

0

これは正直、それは意味をなさない、動作しません。

$post = new ORM_Post(); 
    $results = $post->fetchAll(); 

    foreach ($results as $key => $result){ 
     //$row is assigned to the whole fetchall result! 
     $row = $results->current(); 
     //in this context $client cannot call a dependent rowset. 
     $client = $row->findDependentRowset('ORM_Post_Client','client'); 
    } 

MMcは、テーブル定義を参照することが間違っていますが、あなたのコードにもいくつかの問題があります。おそらく次のように試してみてください。

$post = new ORM_Post(); 

    $results = $post->fetchAll(); 

    //unless your are going to use the 'key' for something you don't need it 
    foreach ($results as $result){ 

     //you need each row object in order to call findDependentRowset in a one to many relationship. 
     $row = $post->find($result->id)->current(); 
     //unless you have multiple rules set up for each table class pair you don't need to specify the rule. 
     $client = $row->findDependentRowset('ORM_Post_Client'); 
    } 
+0

の上に追加何しようと、私はたくさんの取得: お知らせ:クラスのオブジェクトをに/ユーザー/ intに変換することができませんでしたZend_Db_Table_Rowは - /サイト/GIT/api/library/Zend/Db/Adapter/Abstract.php on line 853 – azz0r

+0

@ azz0r編集しました私たちが探していたそれぞれの結果のプロパティを指定するのを忘れました。 $ result-> idが動作するか、またはプロパティが$ result ['id']に定義されていない場合。 idはテーブルのidフィールドです。おっとり申し訳ありません。 – RockyFord

+0

これは実際にhttp://mattmccormick.ca/2010/04/24/how-to-easily-create-models-and-table-relationships-in-zend-framework/でかなりよく説明されています。 – RockyFord

関連する問題