Zend framework Zend_Db_Table_抽象加载联接模型

Zend framework Zend_Db_Table_抽象加载联接模型,zend-framework,zend-db-table,Zend Framework,Zend Db Table,我有一个表名为: 客户端(id,别名) 职位(身份证、主题) post_客户端(id、post_id、客户端id) 许多客户端可以加入到一个post 使用Zend DB Table abstract,我已开始构建模型,以下是类: 奥莫邮政 class ORM_Post extends Zend_Db_Table_Abstract { protected $_name = 'Post'; protected $_dependentTables = array('ORM_Post_

我有一个表名为:

客户端(id,别名) 职位(身份证、主题) post_客户端(id、post_id、客户端id)

许多客户端可以加入到一个post

使用Zend DB Table abstract,我已开始构建模型,以下是类:

奥莫邮政

class ORM_Post extends Zend_Db_Table_Abstract {

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

}
ORM_客户端

class ORM_Client extends Zend_Db_Table_Abstract {


    protected $_name = 'Client';
    protected $_dependentTables = array(
        'ORM_Post_Client'
    );
}
ORM_Post_客户端

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的实例,然后加载关联的客户机,以及加载客户机的实例并加载所有关联的Post

所以我这样做了:

    $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模型中声明Post_客户端连接

编辑

以下是我想要的:

    $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' => array(
            'columns'           => 'client_id',
            'refTableClass'     => 'ORM_Client',  //instead of ORM_Post_Client 
            'refColumns'        => 'id'
        )
refTableClass=>父表的类名。使用该类 名称,而不是SQL表的物理名称()

我还认为你的循环应该是:

foreach ($results as $result){
        $row = $results->current();
        $clients = $row->findDependentRowset('ORM_Post_Client','post'); 
  }
因为你正在寻找一篇文章的客户,这意味着这篇文章是你的
规则


$row->findDependentRowset($table,[$rule]);

这样做是行不通的,老实说,这毫无意义

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

谢谢你发现这个。然而,这并不能解决这个问题。I get:Reference rule“client”不引用表ORM_post I get一堆:注意:Zend_Db_table_Row类的对象无法在/Users/-/Sites/GIT/api/library/Zend/Db/Adapter/Abstract.php中在线转换为int853@azz0r我做了一次编辑,但忘了指定我们要查找的每个结果的属性$result->id应该可以工作,或者如果属性未定义$result['id']。其中id是表的id字段。很抱歉,这在我们的网站上解释得很好