PHP致命错误'yii \ base \ ErrorException',找不到消息'Class'Model Name'

时间:2017-02-24 13:57:12

标签: php yii2 yii2-advanced-app yii2-model

我尝试将项目从yii1迁移到yii2。 当我还在使用Yii1时,我有一些模型功能,其中就是生成id uniq函数,如下所示:

public static function generateID($tableName, $modelName) {
        $dateNow = date("Ymd");
        $checkLastID = $modelName::findBySql(
            "SELECT SUBSTR(MAX(id),-4) AS id FROM $tableName WHERE id LIKE '%$dateNow%'"
        )->one();
        $lastNumber = (int)substr($checkLastID["id"], 8,4);

        if($checkLastID["id"] == '') {
            $id = $dateNow.sprintf("%04s", 1);          
        } else {
            $lastNumber = $checkLastID["id"];
            $lastNumber++;
            if($lastNumber < 10) $id = $dateNow.sprintf("%04s", $lastNumber);
            elseif($lastNumber < 100) $id = $dateNow.sprintf("%04s", $lastNumber);
            elseif($lastNumber < 1000) $id = $dateNow.sprintf("%04s", $lastNumber);
            elseif($lastNumber < 10000) $id = $dateNow.sprintf("%04s", $lastNumber);
            else $id = $lastNumber;
        }
        return $id;
    }

我从控制器访问这个函数:

$model->id = Helper::generateID('table_name', 'ModelName');

而且,当我想要创建数据时显示错误:

<pre>PHP Fatal Error &#039;yii\base\ErrorException&#039; with message &#039;Class &#039;ModelName&#039; not found&#039; 

in C:\xampp\htdocs\kampunginggrispare.com\common\models\Helper.php:61

Stack trace:
#0 [internal function]: yii\base\ErrorHandler-&gt;handleFatalError()
#1 {main}</pre>

但是,如果我改变了

$checkLastID = $modelName::findBySql("SELECT SUBSTR(MAX(id),-4) AS id FROM $tableName WHERE id LIKE '%$dateNow%'")->one();

是:

$checkLastID = ModelName::findBySql("SELECT SUBSTR(MAX(id),-4) AS id FROM table_name WHERE id LIKE '%$dateNow%'")->one();

这是有效的,但是当我使用上面的函数

时,它不起作用

在Yii1中,不是错误,而是Yii2中的错误

任何人都可以帮助我吗?

谢谢...

2 个答案:

答案 0 :(得分:1)

尝试在Helper类中使用之前加载$ ModelName。你可以

...

$dateNow = date("Ymd");
$className = '\common\models\\' . $modelName; // replace this with your model's namespace
$checkLastID = $className::findBySql(
    "SELECT SUBSTR(MAX(id),-4) AS id FROM $tableName WHERE id LIKE '%$dateNow%'"
)->one();

....

或者简单地将您的助手放在具有$ModelName的相同名称空间中(不太推荐)。我仍然不明白你Helper课程的目的。

答案 1 :(得分:0)

Yii2没有找到ModelName课程。

请阅读有关升级的更多信息:Upgrading from Version 1.1: NamespaceYii2 autoloaders