Zend Framework模型关系和访问相关记录

时间:2011-02-21 16:21:01

标签: zend-framework zend-db zend-db-table

我有一个zend框架模型:

class User extends Zend_Db_Table_Abstract {
    protected $_name    = 'users';
    protected $_primary = 'id';
    protected $_dependentTables = array('UserItem');

    public function refresh($) {
        $items = $this->findDependentRowset('UserItem', 'items');
            // do stuff with each item
        print_r($items);
        die();
    }
}

我也有相关的模型:

<?php
class UserItem extends Zend_Db_Table_Abstract
{
    protected $_name = 'user_items';
    protected $_referenceMap    = array(
        'items' => array(
            // user_id is the name of the field on the USER_ITEMS table
            'columns'           => 'user_id',
            'refTableClass'     => 'User',
            // id is the name of the field on the USERS table
            'refColumns'        => 'id'
        )
    );
}

&GT;

我希望我能够打电话给User->refresh();,并且会发生一些奇特的事情。但错误是

 Fatal error: Call to undefined method FbUser::findDependentRowset() 

这告诉我,虽然我认为我根据Zend文档正确地做了http://framework.zend.com/manual/en/zend.db.table.relationships.html但我错过了一些东西。

如果它有所不同,首先运行项目列表将为空,然后我将“Upsert”一大堆项目 - 未来运行我将比较所有项目只更新不同的项目。嗯......这绝对不相关:)

1 个答案:

答案 0 :(得分:2)

你的课程是混合的。每个实体应该有2个类...一个EntityTable(您的表网关)和一个实体(您的行网关)。所以类声明应该类似于:

class User extends Zend_Db_Table_Row

class FbUser extends User

class UserTable extends Zend_Db_Table_Abstract

class UserItem extends Zend_Db_Table_Row

class UserItemTable extends Zend_Db_Table_Abstract

行类是您的模型(或根据您希望如何连接它来链接到模型),而不是表类。

findDependentRowset方法在Zend_Db_Table_Row类上,这就是你收到错误的原因......你已经在某种程度上扩展了错误的类。

在某种程度上,我的意思是你的表定义是正确的,但你正在尝试使用像行一样的表实例。您可以按照上面的建议添加/更改类使用,也可以将用户的wor实例作为要刷新的参数传递给表类:

public function refresh(Zend_Db_Table_Row $user)
{
   $items = $user->findDependentRowset('UserItem', 'items');
   // do stuff with each item
   print_r($items);
   die();
}