CActiveRecord的嵌套

CActiveRecord的嵌套,activerecord,yii,Activerecord,Yii,当我从控制器调用此方法时,它可以正常工作 SomeModel::model()->getItemByParentId($someVariable) 但现在我有3个非常类似于SomeModel的模型,所以我想把常用方法放在一个类中 class SomeModel extends CActiveRecord { public static function model($className=__CLASS__) { return parent::model($clas

当我从控制器调用此方法时,它可以正常工作 SomeModel::model()->getItemByParentId($someVariable)

但现在我有3个非常类似于SomeModel的模型,所以我想把常用方法放在一个类中

class SomeModel extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return '{{some_table}}';
    }   

    public function getItemByParentId($parentId)
    {
        $criteria=new CDbCriteria;
        //some criteria

        return self::model()->findAll($criteria);
    }
}
但是得到错误

活动记录类“CommonModel”的表“CommonModel”不能 可以在数据库中找到

怎么了?

尝试更改:


我已经尝试过获取“SomeController及其行为没有名为“model”的方法或闭包”:(方法
getItemByParentId
必须放置在
CommonModel
中。从控制器中使用:SecondModel::model()->getItemByParentId($id);然后我不明白从哪里得到类
SomeController
?我也不明白。但是使用“self”我从模型中得到错误,从控制器中得到“static”:(好的,对于使用第二个模型::getItemByParentId($id),必须声明
公共静态函数getItemByParentId($parentId)
,但所有这些都必须工作。我制作了一个工作示例-将其复制到您的文件夹“controllers”中,然后重试。有关错误的详细信息,请在index.php的开头执行此操作:
define('yi_DEBUG',true);
define('yi_TRACE_LEVEL',3);
class CommonModel extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function getItemByParentId($parentId)
    {
        $criteria=new CDbCriteria;
        //some criteria

        return self::model()->findAll($criteria);
    }
}

class FirstModel extends CommonModel
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return '{{first_table}}';
    }
}

class SecondModel extends CommonModel
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    public function tableName()
    {
        return '{{second_table}}';
    }
}
public function getItemByParentId($parentId)
{
    $criteria=new CDbCriteria;
    //some criteria

    return static::model()->findAll($criteria);
}